身份验证在 Laravel 5.2 中不持久


Auth not persisting in Laravel 5.2

我在登录时有我的身份验证。

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 确实在保留用户,并且问题出在您的代码中的其他地方。

我没有注意到拉拉维尔的身份验证类有任何问题。