2016-05-25 2 views
2

Ich baue eine Laravel-Anwendung, wo ein Benutzer ein anderes Gerät anmeldete und während ich ausgeloggt bin, möchte ich ihn zwingen, von einem anderen Gerät abgemeldet zu werden. Wie implementiere ich in Laravel?PHP Laravel: Wie man sich von anderem Gerät mit derselben userId abmahnt

Persönlich habe ich Redis Server dafür verwendet. Aber ich weiß nicht, warum es nicht funktioniert. Während ich das Programm ausgeführt habe, habe ich redis-server.exe auch ausgeführt. Und ich bin in Windows. Und hier ist mein Controller, wo ich die Anmeldung geschrieben habe, um den Benutzer von einem anderen Gerät abzumelden. Wenn jemand irgendeine Lösung findet, bitte hilf mir, es herauszufinden. Danke im Voraus.

Controller:

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); 
    } 
    Auth::logout(); 
    return redirect()->route('main'); 
} 
+0

korrigiert mich wenn ich falsch liege, aber wenn der Redis Die Speicherklasse funktioniert wie folgt: $ redis-> sadd ($ key, $ value); ', Sie speichern nur eine Sitzungs-ID, und jeder Benutzer protokolliert, dass Sie die vorherige überschreiben. – TheFallen

+0

Nein, weil ich dd() die o/p und andere Session ID habe ich habe. – User57

+0

Haben Sie den Session-Treiber in 'config/session.php' nach Redis geändert oder verwenden Sie nur die Redis-Fassade für den Sitzungs-ID-Speicher? – TheFallen

Antwort

0

Wenn Sie Schleife jede Benutzersitzung Last es durch seine ID und klar alle Daten darin:

foreach ($userSessions as $sessionId) { 
     if ($currentSession == $sessionId) { 
      continue; 
     } 
     $redis->srem('user:sessions:' . $userId, $sessionId); 
     $redis->del('laravel:' . $sessionId); 
     \Session::setId($sessionId); //ADD THIS 
     \Session::clear(); //ADD THIS 
    } 
+0

Das gleiche Problem, das ich gegenüberstelle .. von einem Gerät protokolliert, aber nicht von anderen ausgeloggt .. Danke für die Hilfe obwohl .. – User57

+0

Sie sollten debuggen, was dann passiert. Ich würde vorschlagen, die Sitzungs-IDs aller Geräte aufzuschreiben, auf denen Sie testen. Sie können es wie folgt bekommen: '\ Session :: getId()'. Überprüfen Sie dann, ob diese Sitzungs-IDs für den Schlüssel "user: sessions:" vorhanden sind. $ userId '. – TheFallen

+0

Es gibt keine sessionId, nachdem ich mich ausgeloggt habe, wie ich gesehen habe mit dd(); – User57

Verwandte Themen