我在登录时有我的身份验证。
if (Auth::attempt($userdata)) {
dd(Auth::user()); //this shows the user just fine,
//which proves that the auth driver is working.
return redirect()->intended('dashboard');
}
但是,在重定向到仪表板后。 身份验证似乎未持久化。 如果我dd(Auth::user())
甚至只是Auth::check()
它返回 null。
路线如下:
Route::group(['middleware' => ['web']], function () {
Route::get('test',function(){
dd(Auth::user()); //returns null
echo Auth::user()->name; // returns Trying to get property of non-object
});
});
我做错了什么?
奇怪的是,昨晚它正在工作。 它有点神奇地停止工作。
这个问题的解决方案并不明显,特别是来自旧版本的laravel。
感谢这个链接。身份验证会话在拉拉维尔 5.2
中被杀我能够解决它,所以我将发布答案以帮助遇到相同问题的其他人。
最初我只是在我的路线上有这个。
Route::post('app/login', 'Auth'AuthController@doLogin');
Route::group(['middleware' => ['web','auth']], function () {
Route::get('test',function(){
dd(Auth::user());// was always returning null
});
});
但是,为了让登录名持久化,我必须这样做
Route::group(['middleware' =>[ 'web']], function () {
Route::post('app/login', 'Auth'AuthController@doLogin');
});
Route::group(['middleware' => ['web','auth']], function () {
Route::get('test',function(){
echo Auth::user()->name;
});
});
显然,任何要调用或注册会话的路由都需要使用"Web"中间件。
只需将"auth"中间件添加到您的"测试"路由中,并在登录时尝试访问它。它不应该以这种方式给你任何错误。如果您尝试在不登录的情况下访问它,它应该将您重定向到"auth"中间件中定义的任何路由。
通过使用"auth"中间件,你基本上可以确保Auth::user()将始终返回一个正确的用户实例。
现在,如果这有效,那么您可以确定 Laravel Auth 确实在保留用户,并且问题出在您的代码中的其他地方。
我没有注意到拉拉维尔的身份验证类有任何问题。