Auth不会坚持使用Laravel 5.2

时间:2016-03-10 15:51:33

标签: php laravel authentication 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');
} 

但是,重定向到仪表板后。似乎auth不会持久化。如果我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
     });
});

我做错了什么?

关于这一点的奇怪之处在于昨晚它正在发挥作用。它有点神奇地停止了工作。

2 个答案:

答案 0 :(得分:1)

对此的解决方案并不明显,特别是来自旧版本的laravel 感谢这个链接。 Auth Session killed in 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”中间件。

答案 1 :(得分:0)

只需添加" auth"中间件到你的"测试"路由并尝试在登录时访问它。它不应该以任何方式给你任何错误。如果您尝试在不登录的情况下访问它,它应该将您重定向到" auth"中定义的任何路由。中间件。

使用" auth"中间件,您基本上确保Auth :: user()将始终返回正确的用户实例。

现在,如果这样可行,那么您可以确定Laravel Auth确实会持久保存用户,并且问题出现在代码中的其他位置。

我还没有注意到Laravel中Auth类的任何问题。