【问题标题】:How can i close current session in laravel?如何在 laravel 中关闭当前会话?
【发布时间】:2020-06-16 18:14:50
【问题描述】:

我需要关闭当前会话。当用户通过另一个设备(另一个浏览器)登录时,我正在尝试实现逻辑,所有使用您的 ID 的会话都将关闭,当他通过旧浏览器登录时,他将转到授权页面。我能做到吗?

【问题讨论】:

  • 这能回答你的问题吗? Laravel - destroy existing sessions on login
  • Session::getHandler()->destroy 只是删除会话。但我需要与 user_id 的关闭会话在我的数据库中并创建新会话。我需要它,因为我想知道,用户访问我的网站的次数和时间。对不起我的英语)

标签: laravel laravel-5


【解决方案1】:

如果您想从除当前浏览器之外的所有其他设备上注销,则可以按照以下步骤操作:

第 1 步:app/Http/Kernel.php 文件中的 $middlewareGroups 属性中取消注释 \Illuminate\Session\Middleware\AuthenticateSession::class 行,因为这是在 Laravel 中管理用户 sessions 的中间件。

/**
 * The application's route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [
        ...
        \Illuminate\Session\Middleware\AuthenticateSession::class,
        ...
    ],
    ...
];

第二步:接下来,您可以在Auth facade 上使用logoutOtherDevices 方法,该方法将用户密码作为唯一参数。在你的LoginController

use Illuminate\Support\Facades\Auth;
protected function authenticated($request, $user) { 
    Auth::logoutOtherDevices($request("password")); //add this
}

【讨论】:

  • 我做了你所说的一切,但它不起作用。我想我做错了什么。我使用我的自定义中间件,我在其中检查 Auth::check(),如果错误重定向到 loginController。在我的 loginController 中,我使用公共函数 login(Request $request) { if(Auth::attempt(['email'=>$request->email, 'password'=>$request->password])) { Auth:: logoutOtherDevices($request->password); } else { return 'Вы ввели неверный логин или пароль'; } }
  • 我明白。此方法适用于 laravel 6.x,但我的 laravel 版本是 5.8
猜你喜欢
  • 2021-12-04
  • 2020-12-07
  • 2017-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-26
  • 1970-01-01
  • 2016-04-04
相关资源
最近更新 更多