我有我的身份验证在登录时这样做。
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
});
});
我做错了什么?
关于这一点的奇怪之处在于昨晚它正在发挥作用。它有点神奇地停止了工作。
答案 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类的任何问题。