当用户从垂直设备注销时,我要从他迄今为止登录的所有设备中注销。我在Laravel中如何做。
我已经使用Redis通过安装“ predis / predis”:“〜1.0”将userId保留在Session中。
这是我用于登录和注销的控制器:
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');
}
它已成功登录并注销,但不会终止其他设备上的所有会话。
我该如何解决这个问题?
因此,redis键名中的错字是问题,因为写数据使用的
$redis->sadd('users:sessions:'.$userId,Session::getId());
是键的前缀'users:sessions:'
,而获取数据使用的 $redis->srem('user:sessions:' . $userId, $sessionId);
是键的前缀,'user:sessions:'
这就是为什么代码不起作用并dd()
返回空数组的原因。
所以正确的代码看起来像这样
public function postSignIn(Request $request)
{
if (Auth::attempt(['email' => $request['email'], 'password' =>$request['password'] ]) ) {
$redis = \Redis::connection();
$userId=Session::getId();
$redis->sadd('user: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');
}
我在一个数据库表中有一个GCM注册用户列表及其相应的注册ID,我实际上想在用户从表中删除时注销该用户。我在Stackoverflow中发现了很多示例,但大多数示例都基于旧的GCMRegistarAPI,现在已经不推荐使用了。我正在使用GoogleCloudMessaging API,并通过以下方法注册用户: 我有一个管理员应用程序,它充当第三方应用程序服务器,因为它向所有用户推送通知。我想注销一个
问题内容: 我创建了一个Login页面以及许多其他页面,其中包含用于检查会话的代码。如果用户没有会话,则所有页面将重新加载并重定向到注销页面。每三秒钟调用一次此脚本。 我编写的代码可以正常工作,但我想以另一种方式实现它。用户注销后,所有打开的选项卡都会重新加载/刷新,从而导致用户注销。那可能吗? sessioncheck.php : 此代码在每个页脚中: 问题答案: 当ajax有用时 在以下情况下
我在web应用程序中使用AWS Cognito身份验证。用户可以使用三个身份提供者之一进行身份验证:cognito用户池(通过用户名和密码)、facebook和google。以下是我获取凭据的方式: 登录-对象,可以包含来自cognito、facebook和google的令牌。 如果用户单击注销按钮,web应用程序应该做什么?如果当前用户存在(当前用户仅存在于cognito用户名、密码验证中),我
我制作了一个Android应用程序。我使用GCM推送通知。当用户登录时,我正在向GCM注册设备。我使用外部MySql数据库来存储用户的注册ID。它工作得很好。 但是 当我做了以下步骤: 在我的手机上安装了我的应用程序。 用用户1登录。 从我的手机卸载应用程序。 再次安装应用程序。 用用户2登录。 我的手机仍会收到user1通知,这意味着卸载应用程序时GCM没有注销我的设备。 我不能删除的应用程序卸
如何从Firebase获取设备令牌(FCM注册令牌)? 我正在使用firebase制作移动应用程序,并使用Node.js制作其服务器。 当用户第一次运行应用程序并注册FCM服务器时,我是否应该将令牌保存到另一个数据库?
问题内容: 我在iOS应用中使用Firebase身份验证。当用户使用Firebase登录我的应用程序然后注销该用户的所有其他设备(会话)时,Firebase中是否有任何方法?我可以使用Firebase admin SDK来做到这一点吗? 问题答案: 当我遇到此问题时,我已使用云功能解决了该问题,请访问此链接以获取更多详细信息https://firebase.google.com/docs/auth