2016-05-26 7 views
3

私は他のデバイスにログインしていて、ログアウトしている間に他のデバイスからもログアウトするようにするラーバルアプリケーションを構築しています。どのようにlaravelで実装するのですか?Laravel 5 - Redisを使用して彼のすべてのデバイスからユーザーをログアウトする方法

個人的に私はRedis Serverを使用しました。私が実行しているプログラムを実行している間redis-server.exe also.And私はWindowsにいる。 は、私はまた

"predis/predis": "~1.0"をインストールし、ここで私は、他のデバイスからログアウトからユーザーを強制するためにログインを書いた私のコントローラでいるすでにlaravelでインストールRedisのほかCACHE_DRIVER=redis SESSION_DRIVER=redis でも.envファイルを変更しました。サインインもコントローラーで

は私がddは()私は、そのユーザー用に作成されたセッションを参照してください$redisが、私は、ログインとログアウトしようとするとき、私は(DD)$userSessionsをしかし、とき、それはへのセッションテーブルに格納されている何を意味するので、空に見たときに比較する。

誰かが解決策を見つけた場合は、見つけてください。前もって感謝します。

コントローラー:あなたはこのようSTHを使用することができますLaravelでのRedisを使う

public function postSignIn(Request $request) 
    {  

    if (Auth::attempt(['email' => $request['email'], 'password' =>$request['password'] ])) { 
     $redis = \Redis::connection(); 
     $userId = Auth::user()->id; 
     $redis->sadd('users:sessions:' . $userId,Session::getId());  
     return redirect()->route('main'); 
    } 
    return redirect()->back(); 
} 



public function getLogout() 
{ 
    $redis = Redis::connection(); 
    $userId =Auth::user()->id; 
    $userSessions = $redis->smembers('user:sessions:' . $userId); 
    $redis->sadd('users:sessions:'.$userId,Session::getId()); 
    $currentSession = Session::getId(); 
    foreach ($userSessions as $sessionId) { 
     if ($currentSession == $sessionId) { 
     continue; 
     } 
     $redis->srem('user:sessions:' . $userId, $sessionId); 
     $redis->del('laravel:' . $sessionId); 
     \Session::setId($sessionId); 
     \Session::clear(); 
    } 
    Auth::logout(); 
    return redirect()->route('main'); 
} 

答えて

0

:あなたは具体的なタグで保存されたすべてのキーを削除するには

// During LogIn 
Cache::tags(['sessions', auth()->id])->forever('session:'.auth()->id, Session::getId()); 

// Logout 
Cache::tags([auth()->id])->flush(); 

タグができます。 [更新]

あなたはセッション変数名に合うように持っています。

public function postSignIn(Request $request) 
{ 

    if (Auth::attempt(['email' => $request['email'], 'password' =>$request['password'] ])) { 
     $userId = Auth::user()->id; 
     \Cache::tags(['sessions', 'session_'.$userId])->forever('users:sessions:' . $userId, Session::getId()); 
     return redirect()->route('main'); 
    } 
    return redirect()->back(); 
} 



public function getLogout() 
{ 
    $userId =Auth::user()->id; 

    $sessionId = \Cache::get('users:sessions:' . $userId); 
    \Cache::tags(['session_'.$userId])->flush(); 
    \Session::setId($sessionId); 
    \Session::clear(); 

    Auth::logout(); 
    return redirect()->route('main'); 
} 
+0

ログアウトコントローラでログイン中に作成されたセッションはどのように削除されますか? 私はあなたのコードに置き換えて、実際には何も変更されません。 – User57

+0

私は完全なコードに私の答えを更新しました。 – Pyton

+0

私はあなたのコードで変更しましたが、何も実際に助けてくれてありがとう! – User57

関連する問題