Besoin d'aide ?

Redirection en cas de blacklist email

  • Avatar de toto33347
    Membre depuis :
    05/06/2017
    Messages :
    20

    Salut à tous !

    Voilà: j'ai un processus de création de compte créé via php artisan make:auth , j'ai vérifié si l'adresse mail est dans la liste noire, et j'ai fait un petit if pour le cas où l'adresse est bien dans la liste. Tout ça, c'est bon mais je veux simplement faire un petit redirect vers une page statique. Et c'est là que ça coince... Je n'ai vraisemblablement pas l'autorisation de faire ce redirect.

    Ca parraît tout con mais je bloque. ca m'affiche :

    FatalThrowableError in SessionGuard.php line 408:
    Type error: Argument 1 passed to Illuminate\Auth\SessionGuard::login() must implement interface Illuminate\Contracts\Auth\Authenticatable, instance of Illuminate\Http\RedirectResponse given, called in /home/ubuntu/workspace/vendor/laravel/framework/src/Illuminate/Foundation/Auth/RegistersUsers.php on line 35

    Voilà mon RegisterController :

    <?php

    namespace App\Http\Controllers\Auth;

    use App\User;
    use App\Http\Controllers\Controller;
    use Illuminate\Support\Facades\Validator;
    use Illuminate\Foundation\Auth\RegistersUsers;
    use Mail;
    use App\Mail\Bienvenue;
    use App\ListeNoire;

    //use App\autocomplete;

    class RegisterController extends Controller
    {
    /
    |--------------------------------------------------------------------------
    | Register Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users as well as their
    | validation and creation. By default this controller uses a trait to
    | provide this functionality without requiring any additional code.
    |
    /

    use RegistersUsers;
    /
    Where to redirect users after registration.

    @var string
    /
    protected $redirectTo = '/';

    /

    Create a new controller instance.

    @return void
    /
    public function __construct()
    {
    $this->middleware('guest');
    }

    /*
    Get a validator for an incoming registration request.

    @param array $data
    @return \Illuminate\Contracts\Validation\Validator
    /
    protected function validator(array $data)
    {

    return Validator::make($data, [
    'login' => 'required|string|max:25|unique:users',
    'email' => 'required|string|email|max:255|unique:users',
    'password' => 'required|string|min:6|confirmed',
    'country-id' => 'string',
    'avatar' => 'required|string',
    ]);
    }

    /*
    Create a new user instance after a valid registration.

    @param array $data
    @return User
    /
    protected function create(array $data)
    {

    $verif = ListeNoire::verif($data['email']);

    if ($verif == 0){

    Mail::to($data['email'])->send(new Bienvenue);
    //Mailtrap

    return User::create([
    'email' => $data['email'],
    'login' => $data['login'],
    'password' => bcrypt($data['password']),
    'ville_id_VILLES' => $data['country-id'],
    'avatar' => $data['avatar'],
    ]);

    }else {

    //return redirect()->guest('/blacklist');
    //return view('blacklisted');
    return redirect()->action('AccueilController@blacklist');

    };

    }
    }
  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    1869

    Salut,

    La méthode create doit retourner une instance de User. Voilà le code du trait pour mieux comprendre le problème :

    public function register(Request $request)
    {
    $this->validator($request->all())->validate();
    event(new Registered($user = $this->create($request->all())));
    $this->guard()->login($user);
    return $this->registered($request, $user)?: redirect($this->redirectPath());
    }

    Je pense que le mieux est de surcharger cette méthode dans le contrôleur.

  • Avatar de toto33347
    Membre depuis :
    05/06/2017
    Messages :
    20

    Merci bestmomo.

    Donc c'est bien dans RegistersUsers.php que je dois faire des changements...

    Par contre je ne vois pas comment faire :/

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    1869

    Il suffit de surcharger la méthode dans le contrôleur en incluant le code additionnel :

    public function register(Request $request)
    {
    $this->validator($request->all())->validate();
    if (!ListeNoire::verif($request->email)) {
    Mail::to($data['email'])->send(new Bienvenue);
    event(new Registered($user = $this->create($request->all())));
    $this->guard()->login($user);
    return $this->registered($request, $user)?: redirect($this->redirectPath());
    }
    return redirect()->action('AccueilController@blacklist');
    }

    Il faut remettre la méthode create dans son état originel.

  • Avatar de toto33347
    Membre depuis :
    05/06/2017
    Messages :
    20

    Niquel ! Tout marche :)
    Merci à toi :D

Vous ne pouvez pas répondre à ce sujet.