我的用户表中有一个字段 (can_login
)。
正常情况下,用户可以登录。并使用以下代码注销:
Auth::logout();
我希望,当登录用户每次刷新页面时,
laravel 检查用户表中的 can_login
。
如果 can_login
为 false,则自动注销。
我在RouteServiceProvider
中尝试这个
public function boot()
{
parent::boot();
if(auth()->user()->can_login){
return route('logout');
}
}
但是 auth()->user()
始终为空。
最佳答案
您可以使用中间件或向现有身份验证中间件添加检查。
在每个请求中,它都会通过中间件来检查用户是否经过身份验证,之后 auth()->user()
将不为空。
最简单的解决方案是在 app/Http/Middlewares/CheckUserCanLoginMiddleware.php 中创建一个中间件
class CheckUserCanLoginMiddleware
{
public function handle(Request $request, Closure $next)
) {
if ($request->user()->can_login ?? false) {
Auth::logout();
return $this->sendUnauthorizedResponse();
}
return $next($request);
}
}
然后将其注册为 bootstrap/app.php 文件中的routeMiddleware`。
您需要的最后一件事是在身份验证中间件之后将其用于我们的路由中间件。
关于laravel:如何保持登录直到条件变为假?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57616317/