Gdy użytkownik wylogował się z urządzenia perpikcyjnego, chcę się wylogować ze wszystkich urządzeń, na których się zalogował do tej pory. Jak to robię w Laravel.Laravel 5.2 - Jak wylogować użytkownika ze wszystkich jego urządzeń
Użyłem Redis do przechowywania identyfikatora użytkownika w sesji instalując "predis/predis": "~ 1.0"
i tu jest mój kontroler dla signin i wylogowania:
public function postSignIn(Request $request)
{
if (Auth::attempt(['email' => $request['email'], 'password' =>$request['password'] ])) {
$redis = \Redis::connection();
$userId=Session::getId();
$redis->sadd('users:sessions:'.$userId,Session::getId());
return redirect()->route('main');
}
return redirect()->back();
}
public function getLogout()
{
$redis = Redis::connection();
$userId=Session::getId();
$userSessions = $redis->smembers('user:sessions:' . $userId);
$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');
}
To powodzeniem dostać zalogowany i wylogowany, ale nie zabija całej sesji na innych urządzeniach.
Jak rozwiązać problem?
Spróbuj zmienić położenie linii na funkcję getLogout: $ redis-> Srem; ('USER:: sesje' $ USERID $ sessionid). $ redis-> del ('laravel:'. $ sessionId); –
Występuje problem z moim Redis Connection tak samo Błąd pojawia się po zmianie tych linii. – Hola
hm Myślę, że powinieneś użyć '$ userId = Auth :: user() -> id;' zamiast '$ userId = Session :: getId();' ponieważ second daje ci identyfikator sesji, ale nie użytkownika Myślę, że problem, w ten sposób w twoim przypadku zapisujesz za każdym razem tylko jeden identyfikator sesji – dyachenko