ユーザーがperticularデバイスからログアウトすると、彼は今までにログインしたすべてのデバイスからログアウトします。私はララヴェルでそれをどうやってやるのか。Laravel 5.2 - すべてのデバイスからユーザーをログアウトする方法
私は "predis/predis" をインストールすることにより、セッションではuserIdを保つためのRedisを使用している: "〜1.0"
そして、ここでは、サインインおよびログアウトのための私のコントローラである:
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');
}
それが正常に取得していますログインしてもログアウトしますが、他のデバイスのすべてのセッションを強制終了しません。
どのように問題を解決できますか?
のように見えるだけでgetLogout機能上のライン位置に変更してみてください( 'ユーザー:セッション:' $ userIdを、$セッションIDを); $ redis-> del( 'laravel:'。$ sessionId); –
redis Connectionに問題がありますので、同じ行を変更した後に同じエラーが表示されます。 – Hola
hm 2番目にセッションIDが与えられているがユーザは与えられていないので、$ userId = Session :: getId();の代わりに '$ userId = Auth :: user() - > id;'を使うべきだと思います 私は問題だと思いますが、これはあなたのケースでは1回だけセッションIDを保存します – dyachenko