Auth::guest() 为已登录和已注销的用户返回 true
Posted
技术标签:
【中文标题】Auth::guest() 为已登录和已注销的用户返回 true【英文标题】:Auth::guest() returns true for both logged in and logged out users 【发布时间】:2016-04-21 20:41:31 【问题描述】:我是 laravel 的新手,所以我试图创建一个用于学习目的的小项目。我已经使用内置的身份验证进行登录和注册。这些自动生成的页面运行良好,现在我使用名为 postcontroller 的控制器创建了一条到资源帖子的路由。
现在在 postcontroller 中,我检查用户是否有权返回视图:将其他帖子发布到登录页面。所以要检查它,我会遵循
if (!Auth::guest())
return view('posts');
else
return "......";
现在 。
【问题讨论】:
您的路由是否应用了“网络”中间件? 是 Route::group(['middleware' => 'web'], function () Route::auth(); Route::get('/home's,'homecontroller@index) ; 【参考方案1】:你确定你已经登录了吗?
尝试使用
转储您的 Auth::user() 数据dd(Auth::user());
顺便说一句,如果您在 if 语句中返回,则不需要使用 else。
【讨论】:
是的,即使我已登录,当我将 Auth::user 转储到我的 postcontroller 中时它也会显示 null 嗯,应该是 Auth::user()。但是你说它返回null,表示你没有登录。 但我确实使用提供的登录页面登录,【参考方案2】:您需要确保使用“网络”中间件。默认情况下,主页不使用此路由,但 /home 路由使用,这就是刀片模板在 /home 下工作的原因。
添加 'web' 中间件和 dd(Auth::user()) 你会看到更好的结果。
【讨论】:
【参考方案3】:但是您必须添加这行代码,以便中间件在 postcontroller 中知道它需要检查登录用户。添加这是 PostController:
public function __construct()
$this->middleware('auth', ['except' => ['index', 'show']]);
在此之后,您需要确保将路线添加到路线列表中。这是通过在 Routes/web.php 中添加给定的行来完成的
Route::resource('user','PostController');
通过在终端中键入以下命令来重新检查它是否添加:
php artisan route:list
一旦添加了路由,控制器就知道他们可以相互通信了,一切就绪。
注意:如果用户登录,则表示用户只能访问索引和显示路线。在这里查看 laravel documentation 了解更多详情。希望这会有所帮助。
【讨论】:
【参考方案4】:你可以使用
if(!Auth::user())
//用户未登录
否则
//用户登录
【讨论】:
但我想问题是关于 Auth::guest()以上是关于Auth::guest() 为已登录和已注销的用户返回 true的主要内容,如果未能解决你的问题,请参考以下文章
在Freemarker模板中检查Spring安全角色和已记录的用户名