laravel:如何保持登录直到条件变为假?

标签 laravel authentication laravel-authentication

我的用户表中有一个字段 (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/

相关文章:

php - 如何修复空对象引用上的 java.lang.String org.json.JSONObject.toString()'?

swift - 成功登录

php - 如何自定义 Laravel HTTP 基本身份验证中的密码字段?

php - 动态选择 Laravel 身份验证驱动程序

mysql - laravel where 子句即使数据存在也返回 null

php - 如何使用包含斜杠字符的参数定义 Laravel 路由

angular - Auth0 用户信息方法返回仅具有子属性的用户对象

php - Laravel 5.1 auth attempt with extra parameters using default auth controller and middleware

php - Laravel 5 PHPUnit - 从路由返回无效的 JSON

php - 从支付网关重定向后清除 Laravel session 和 Auth