php - usuario - modificar login laravel
Laravel 5: Cómo almacenar atributos adicionales en la sesión de inicio de sesión del usuario (2)
Cuando usa Auth::user()
le da el modelo Eloquent del usuario de autenticación.
Si desea almacenar datos en una sesión, necesita usar el asistente de Session
o session()
.
Puede encontrar más información sobre la sesión en la documentación .
PD: la versión anterior de la documentación es mejor ( http://laravel.com/docs/5.0/session ).
De hecho, estoy implementando autenticación de 2 factores en el proyecto. Lo que hice fue
Auth::user()->google2fa_passed = 1;
De hecho, no almacena realmente, cuando navega a otra página, el valor falta.
Tampoco quiero mantenerme en otra sesión, porque cuando el usuario cierra la sesión (o los usuarios eliminan la cookie de sesión de su navegador) , se mostrará una página de inicio de sesión y se realizará de nuevo la autenticación de 2 factores.
¿Alguna idea de cómo guardar 1 atributo más para la sesión del usuario?
Eventualmente, uso la session
para almacenar.
Después de ingresar el código de 6 dígitos, almacene una bandera en sesión
/Session::put(''totp_passed'', 1);
En la aplicación / Http / Middleware / Authenticate.php , elimine la sesión de 2FA si la sesión expiró
public function handle($request, Closure $next)
{
if ($this->auth->guest()) {
// remove the 2-factor auth if the user session expired
/Session::forget(''totp_passed''); // <------- add this line
if ($request->ajax()) {
return response(''Unauthorized.'', 401);
} else {
return redirect()->route(''auth.login'');
}
}
return $next($request);
}
Luego crea otro middleware, por ejemplo, la aplicación / Http / Middleware / TwoFactorAuth.php
namespace App/Http/Middleware;
use Closure;
class TwoFactorAuth
{
/**
* Handle an incoming request.
*
* @param /Illuminate/Http/Request $request
* @param /Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (!/Session::has(''totp_passed'')) {
return redirect()->route(''auth.2fa'');
}
return $next($request);
}
}
En la aplicación / Http / Kernel.php
protected $routeMiddleware = [
''auth'' => /App/Http/Middleware/Authenticate::class,
''auth.basic'' => /Illuminate/Auth/Middleware/AuthenticateWithBasicAuth::class,
''guest'' => /App/Http/Middleware/RedirectIfAuthenticated::class,
''2fa'' => /App/Http/Middleware/TwoFactorAuth::class, // <------ add this line
];
Cómo utilizar
Route::group([''middleware'' => ''auth''], function () {
// must be login first only can access this page
Route::get(''2fa'', [''as'' => ''auth.2fa'', ''uses'' => ''Auth/AuthController@get2FactorAuthentication'']);
Route::post(''2fa'', [''uses'' => ''Auth/AuthController@post2FactorAuthentication'']);
// add 2-factor auth middleware
Route::group([''middleware'' => ''2fa''], function () {
// all routes that required login
});
});