3
我正在構建一個用戶登錄其他設備並在註銷時註冊的laravel應用程序,我想強制他也從其他設備註銷。我如何在laravel中實現。Laravel 5 - 如何從使用Redis的所有設備註銷用戶
我個人使用過Redis服務器。在運行程序時,我也運行redis-server.exe
。而且我在Windows中。 我已經改變了.ENV文件還與CACHE_DRIVER=redis SESSION_DRIVER=redis
除了Redis的已經與laravel裝我也裝"predis/predis": "~1.0"
,這裏是我的控制,我已經從其他設備註銷書面登錄迫使用戶。
在登錄控制器時,我dd()$redis
我看到爲該用戶創建的會話,但當我登錄和何時註銷我dd()$userSessions
但看到空,所以它意味着沒有存儲在會話表中以比較。
如果有人找到任何解決方案,請幫我找出答案。提前致謝。
控制器:
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');
}
如何刪除在登出控制器登錄時創建的會話? 我已經用你的代碼替換了,實際上沒有任何改變。 – User57
我已經更新了完整代碼的答案。 – Pyton
我已經改變了你的代碼,但沒有得到真正的感謝改變,雖然幫助! – User57