Cómo redirigir de nuevo en el sistema de autenticación predeterminado laravel. Por ejemplo, en Auth \ RegisterController

protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'contact_no' => 'required|unique:users',
            'password' => 'required|string|min:6|confirmed',
           ]);
    }

protected function create(array $data)

{
    $email = $data['email'];
    $token = $data['token'];

    $checkUser = Invitation::where('email', $email)
        ->where('token', $token)
        ->first();

    if (!$checkUser) {
        return redirect()->back()->with('error', 'Credentials not matched !');
    }

   return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'contact_no' => $data['contact_no'],
            'password' => bcrypt($data['password']),
       ]);

Antes de crear un usuario, quiero verificar si el usuario existe o no con un token proveniente de otra tabla. Compruebo el usuario con una consulta y si lo uso antes del método de creación,

if (!$checkUser) {
            return redirect()->back()->with('error', 'Credentials not matched !');
}

Lanza un error

Type error: Argument 1 passed to Illuminate\Auth\SessionGuard::login() must be an instance of Illuminate\Contracts\Auth\Authenticatable, instance of Illuminate\Http\RedirectResponse given,

Se produjo un problema con la redirección dentro de la condición if. Si i dd ('error') dentro si muestra un error cuando la verificación del usuario devuelve nulo

1
Jason 18 oct. 2017 a las 14:32

3 respuestas

La mejor respuesta

Realice un cambio en si la condición en la función protegida crea (matriz $ datos) en RegisterController

 if (!$checkUser) {
            return null;
        }

Y sobrescribe el método de registro de los registros RegitUsers de rasgos en RegisterController

public function register(Request $request)
    {
        $this->validator($request->all())->validate();

        $user = $this->create($request->all());

        if(!$user) return redirect()->back()->with('error','Credentials Not Matched! ');

        event(new Registered($user));

        $this->guard()->login($user);

        return $this->registered($request, $user)
            ?: redirect($this->redirectPath());
    }
0
Jason 21 oct. 2017 a las 07:50

Use isset para verificar si existe un usuario.

if (!isset($checkUser)) {
     return redirect()->back()->with('error', 'Credentials not matched !');
}

Y, por último, recomiendo usar Laracasts / Flash para una mensajería flash más fluida. Entonces su código sería algo como esto.

flash()->error('Credentials not matched.');
return redirect()->back();

Para resumir mi sugerencia:

if (!isset($checkUser)) {
     flash()->error('Credentials not matched.');
     return redirect()->back();
}
1
kissartisan 18 oct. 2017 a las 11:59

Puede agregar su lógica en el método validator del RegisterController de esta manera:

protected function validator(array $data)
{
    \Validator::extend('has_invitation', function($attribute, $value, $parameters) use($data){
        $checkUser = Invitation::where('email', $data['email'])
                                ->where('token', $value)
                                ->first();
        return !$checkUser; 
    }, "Credentials not matched !");

    return Validator::make($data, [
        'name' => 'required|string|max:255',
        'email' => 'required|string|email|max:255|unique:users',
        'password' => 'required|string|min:6|confirmed',
        'token' => 'required|has_invitation'
    ]);
}

Si hay un error en la validación, laravel redirigirá automáticamente a la página de registro.

0
Maraboc 18 oct. 2017 a las 12:02