usuarios usuario tabla sesiones modificar manejo está esta diferente control con campos cambiar autorizada auth administrador acción php session laravel-5 google-authenticator

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 }); });