Quando un utente si è disconnesso da un dispositivo perticulare, voglio disconnettermi da tutti i dispositivi che ha effettuato il login fino ad ora. Come lo faccio a Laravel.Laravel 5.2 - Come disconnettere un utente da tutti i suoi dispositivi
ho usato Redis per mantenere l'ID utente nella sessione con l'installazione "Predis/Predis": "~ 1.0"
Ed ecco il mio controller per SignIn e Esci:
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');
}
E 'ottenere con successo loggato e anche disconnesso ma non uccide tutte le sessioni su altri dispositivi.
Come posso risolvere il problema?
Basta provare a cambiare la posizione della linea sulla funzione getLogout: $ riscoperto> Srem; ('utente:: le sessioni di' $ userId, $ sessionId.) $ redis-> del ('laravel:'. $ sessionId); –
C'è un problema con la mia connessione redis così lo stesso errore che ricevo dopo aver cambiato quelle linee. – Hola
hm Penso che dovresti usare '$ userId = Auth :: user() -> id;' invece di '$ userId = Session :: getId();' perché secondo ti dà id di sessione ma non utente Penso che il problema, con questo così nel tuo caso si salva ogni volta solo un ID di sessione – dyachenko