我在使用认证中间件时遇到了一些麻烦。我已经将中间件放到了一个路由组中,并且回滚了我的用户表。我希望应用程序将我重定向到我的登录/singup页面,但它没有这样做,它只是给了我"试图获得非对象的属性",指的是我的仪表板视图中的Auth::user()
函数(我不应该访问)。
这是我的路由代码:
Route::group(['prefix' => '/{username}/', 'middleware' => ['existing_user', 'auth']], function(){
Route::get('/dashboard', function(){
return view('dashboard');
});
});
这是我的观点:
<h1>{{ Auth::user()->username }}</h1>
另外,我不确定从数据库中删除用户是否意味着Laravel会自动删除用户会话。
谢谢你的帮助!
用户会话可以通过清除浏览器的缓存来删除您的域(例如localhost)。
Laravel使用Auth类来跟踪会话。由于会话同时在客户端和服务器端上工作,因此必须从其中任何一个位置删除会话。删除在客户端是通过浏览器的cookie和删除在客户端可以通过文件,数据库或Redis等…因此,在这种情况下,从 users表中删除用户是没有意义的。从数据库中删除用户不会帮助Auth类知道不再有会话了。事实上,auth()->user()
变成了null
, auth()->check()
仍然得到true
。希望这能让你的概念清晰一点:)