是否可以在Laravel中使用用户ID强制注销?

时间:2016-06-17 07:51:37

标签: laravel

我想知道是否有任何简单的方法可以强制注销不同用户的ID?例如,我需要阻止当前提交的用户,所以我想在我将状态设置为阻止后注销他。

P.S。 我不能使用中间件来检查每个请求。

4 个答案:

答案 0 :(得分:8)

我在Authenticate中间件

中执行此操作
if (!Auth::user()->isActive()) {
    Auth::logout();

    return Redirect::home();
}

用户已经在那里加载,此处不需要额外的数据库查询。

我认为这不是一个性能问题,你只需做一点if语句,只有在需要对用户进行身份验证时才会这样做。

答案 1 :(得分:1)

@ PerterPan666谢谢,我最后创建了一个中间件并将其添加到网络组。

public function handle($request, Closure $next)
    {
        if (Auth::check())
        {
            if (Auth::User()->is_active != 'Y')
            {
                Auth::logout();
                return redirect()->to('/')->with('warning', 'Your session has expired because your account is deactivated.');
            }
        }
        return $next($request);
    }

答案 2 :(得分:1)

如果您使用数据库会话驱动程序,这非常容易:

DB::table('sessions')->where('user_id', $userId)->delete();

答案 3 :(得分:0)

对于以后使用Laravel 5.6+的任何人,都有一个内置的方法。没有提及在何处调用logoutOtherDevices,但是LoginController @ authenticated看起来很不错,因为您可以通过其密码来输入密码,因为方法要求

https://laravel.com/docs/5.8/authentication#invalidating-sessions-on-other-devices

public function authenticated(Request $request, $throttles)
{
    \Illuminate\Support\Facades\Auth::logoutOtherDevices($request->get('password'));