laravel: как оставаться в системе, пока условие не станет ложным?

У меня есть поле (can_login) в моей таблице пользователей.

обычно пользователи могут войти в систему. и выйдите с этим кодом:

 Auth::logout();

Я хочу, чтобы каждый раз, когда вошедший в систему пользователь обновлял страницу, laravel проверял can_login в пользовательской таблице. если can_login ложно, автоматический выход из системы.

Я пробую это в RouteServiceProvider

public function boot()
{
   parent::boot();
   if(auth()->user()->can_login){
       return route('logout');
   }
}

но auth()->user() всегда пусто.


person ali ali    schedule 22.08.2019    source источник
comment
ИМХО, я бы использовал маршрут middleware, а FIY logout - это маршрут POST, на который вы не можете перенаправить, потому что перенаправление - это запрос GET   -  person dparoli    schedule 22.08.2019


Ответы (1)


Вы можете использовать промежуточное ПО или добавить проверку к существующему промежуточному ПО аутентификации. При каждом запросе он проходит через промежуточное программное обеспечение, чтобы проверить, аутентифицирован ли пользователь, и после этого 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);
    }
}

А затем зарегистрируйте его как routeMiddleware` в вашем файле bootstrap/app.php.

Последнее, что вам нужно, это использовать его для наших промежуточных программ маршрутов после промежуточного программного обеспечения аутентификации.

person ibpavlov    schedule 22.08.2019
comment
Спасибо. Я не мог понять «зарегистрировать его как routeMiddleware», можете ли вы объяснить это подробнее? - person ali ali; 22.08.2019
comment
@aliali Да. Вы можете проверить laravel.com/docs/5.8/middleware#assigning- middleware-to-routes есть полезные примеры. - person ibpavlov; 23.08.2019