我想知道是否有任何简单的方法可以强制注销不同用户的ID?例如,我需要阻止当前提交的用户,所以我想在我将状态设置为阻止后注销他。
P.S。 我不能使用中间件来检查每个请求。
答案 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'));