Laravel 7:禁用登录和自动登录(remember_token)
Posted
技术标签:
【中文标题】Laravel 7:禁用登录和自动登录(remember_token)【英文标题】:Laravel 7: Disable login & autologin (remember_token) 【发布时间】:2021-09-29 13:20:39 【问题描述】:我希望能够在我的 laravel 7 应用中禁用某些用户。因此,我在“用户”表中创建了一个“活动”列,当设置为活动 = 0 时,用户无法再登录。
我遇到的问题是“记住我”功能,因为已经登录的用户在我禁用他们的帐户后仍然可以访问该应用,因为他们不必通过登录表单。
删除“Users”表中的“remember_token”会对此有什么影响吗?我对一个用户进行了尝试(删除了表中的用户 remember_token),但它没有立即生效,因为此后自动登录仍然有效。但也许我在这里遗漏了一些东西。
附加信息:我正在使用 Laravel Passport 进行身份验证。
【问题讨论】:
获取身份验证中间件并将您的条件添加到对用户进行身份验证的部分。 @N69S thx,你是对的,会的。 您可以从config/session.php
line : 'lifetime' => env('SESSION_LIFETIME', 120),
缩短会话生命周期,这会影响您的记住我会话,这里是 120 分钟
如果将 active 设置为 0,请取消设置 remember_me 并删除令牌。
啊,我明白了,所以,删除“remember_me”令牌(谢谢@Tpojka)将在 SESSION_LIFETIME(谢谢@sta)中定义的时间后生效。因此,默认情况下,删除“remember_token”后 2 小时自动登录将不再对用户起作用。所以删除令牌就足够了,延迟 120 分钟(默认)。
【参考方案1】:
我决定使用中间件解决方案,因为我不想减少整体 SESSION_LIFETIME。
我创建了一个名为“VerifyUserState”的额外中间件,因为我没有成功通过 Auth::user() 或 $this->auth 在 Authenticated 中的 authenticate/handle 函数中读取用户的“活动”值。 php中间件。
我按照本教程实现了这一点: https://www.itechempires.com/2019/08/how-to-create-configure-and-use-custom-middleware-in-laravel-5-8/
现在它可以根据需要工作了。
【讨论】:
以上是关于Laravel 7:禁用登录和自动登录(remember_token)的主要内容,如果未能解决你的问题,请参考以下文章
如何在我的登录页面中禁用“Laravel 中的会话已过期”?