Laravel 5.2、auth::check return 登录后为真,重定向后为假
Laravel 5.2, auth::check return true after login but false after redirect
我正在尝试使用 laravel 5.2 内置的身份验证系统。登录似乎工作正常,如果我用 Auth::check() 替换 return 语句,它 return 是正确的。但是当我重定向到 '/' 时,Auth::check() 在我的 Auth 中间件中突然 returns false。
会话创建方法:
public function create(Request $request)
{
$email = $request->email;
$password = $request->password;
if(Auth::attempt(['email' => $email, 'password' => $password])) {
return redirect()->intended('/'); // returns true when replaced with Auth::check();
}
return redirect("login");
}
授权中间件:
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guest()) {
if ($request->ajax() || $request->wantsJson()) {
return response('Unauthorized.', 401);
} else {
return var_dump(Auth::check()); // returns false
}
}
return $next($request);
}
路线文件:
Route::post('/create-session', 'SessionController@create');
Route::get('/logout', 'SessionController@logout');
Route::get('/login', function() {
return view('login');
});
Route::group(['middleware' => ['web', 'auth']], function(){
Route::get('/', 'HomeController@getIndex');
});
所有需要会话(Auth 使用)的路由都必须应用 'web' 中间件。
还有:
您的 Auth::check()
是在一个代码块中完成的,该代码块仅在 Auth::guest()
为真时运行。 Auth::guest()
是 Auth::check()
的倒数。
所以你在你的中间件中说:如果当前用户是来宾(未经过身份验证),请检查他们是否是经过身份验证的用户,此时它始终为假。
更新:
根据您的意见:不要将身份验证中间件添加到 'web' 组。如果您这样做,您将永远无法到达 'web' 路线,除非您在进行此更改之前已通过身份验证。如果您这样做,您将失去甚至无法登录的能力。
我正在尝试使用 laravel 5.2 内置的身份验证系统。登录似乎工作正常,如果我用 Auth::check() 替换 return 语句,它 return 是正确的。但是当我重定向到 '/' 时,Auth::check() 在我的 Auth 中间件中突然 returns false。
会话创建方法:
public function create(Request $request)
{
$email = $request->email;
$password = $request->password;
if(Auth::attempt(['email' => $email, 'password' => $password])) {
return redirect()->intended('/'); // returns true when replaced with Auth::check();
}
return redirect("login");
}
授权中间件:
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guest()) {
if ($request->ajax() || $request->wantsJson()) {
return response('Unauthorized.', 401);
} else {
return var_dump(Auth::check()); // returns false
}
}
return $next($request);
}
路线文件:
Route::post('/create-session', 'SessionController@create');
Route::get('/logout', 'SessionController@logout');
Route::get('/login', function() {
return view('login');
});
Route::group(['middleware' => ['web', 'auth']], function(){
Route::get('/', 'HomeController@getIndex');
});
所有需要会话(Auth 使用)的路由都必须应用 'web' 中间件。
还有:
您的 Auth::check()
是在一个代码块中完成的,该代码块仅在 Auth::guest()
为真时运行。 Auth::guest()
是 Auth::check()
的倒数。
所以你在你的中间件中说:如果当前用户是来宾(未经过身份验证),请检查他们是否是经过身份验证的用户,此时它始终为假。
更新:
根据您的意见:不要将身份验证中间件添加到 'web' 组。如果您这样做,您将永远无法到达 'web' 路线,除非您在进行此更改之前已通过身份验证。如果您这样做,您将失去甚至无法登录的能力。