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的主要内容,如果未能解决你的问题,请参考以下文章

如何在注销功能中将会话 ID 标记为已过时 [重复]

在Freemarker模板中检查Spring安全角色和已记录的用户名

根据用户是不是已登录切换登录/注销

php 社区活动(CE):如果用户已登录,请将发布状态设置为已发布,否则回退到CE设置的默认值。

为登录和注销的用户显示不同的标签栏项目

有推送通知问题的登录/注销用户