2016-06-17 17 views
1

自分のIDで別のユーザーを強制的にログアウトさせる簡単な方法があるのだろうか?たとえば、現在ブロックされているユーザをブロックする必要があるため、ブロックするようにステータスを設定した後にログアウトします。LaravelでユーザーIDを使用して強制的にログアウトすることはできますか?

P.S. これは、各リクエストをチェックするためのミドルウェアを使用できません。

+0

なぜあなたはミドルウェアを使用することはできませんか? – PeterPan666

+0

@ PeterPan666プロジェクトが非常に大きく、ブロックされたユーザーの各要求をチェックするとパフォーマンスが低下するためです。私はすでにログイン時にブロック状態をチェックしています。 – Kin

答えて

7

私は、ユーザーがすでに、追加のデータベースクエリがここで必要とされていないがロードされている認証ミドルウェア

if (!Auth::user()->isActive()) { 
    Auth::logout(); 

    return Redirect::home(); 
} 

の内側にこれを行います。

私はそれがパフォーマンス上の問題ではないと思っています。ちょっとした文を実行して、ユーザーが認証される必要がある場合にのみ実行します。

+0

これはlaravel 5.4でどうやってやるの? authミドルウェアは 'Illuminate \ Auth \ Middleware \ Authenticate'にあります。 '/ app/Http/Middleware/Authenticate.php'に作成してコピーして、条件文を追加しますか? – w1n78

+1

LogoutDisableUserミドルウェアを実行し、それをauthミドルウェアの前に呼び出すことができ、 "auth"というグループを作成して、ログアウトを非アクティブにしてからauthミドルウェアを呼び出すこともできます;) – PeterPan666

1

@ PerterPan666ありがとうございました。私はミドルウェアを作成し、Webグループに追加しました。

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); 
    } 
1

データベース・セッション・ドライバーを使用している場合、それは超簡単です:

DB::table('sessions')->where('user_id', $userId)->delete(); 
関連する問題