php laravel在给定时间阻止来自不同设备/浏览器选项卡的用户的多次登录

时间:2018-04-20 09:37:32

标签: laravel authentication laravel-5 login

laravel是否提供了一种方法来阻止用户在给定时间从不同设备/浏览器进行多次登录?如果是,那么我如何强制用户一次从单个设备登录。我正在使用laravel 5.6开发一个在线测验应用程序,用户可以从一个地方登录并进行测试。

2 个答案:

答案 0 :(得分:2)

laravel提供了这种方法来使其他设备上logoutOtherDevices()上处于活动状态的用户会话无效并“注销” 要使用此方法,还需要确保

Illuminate\Session\Middleware\AuthenticateSession

您的app/Http/Kernel.php类的Web中间件组中存在中间件,并且未对其进行注释:

'web' => [
    // ...
    \Illuminate\Session\Middleware\AuthenticateSession::class,
    // ...
],

然后您可以像这样使用它

 use Illuminate\Support\Facades\Auth;
    
 Auth::logoutOtherDevices($password);

答案 1 :(得分:-1)

也许这应该让你开始:

users_table.php

中添加一列
$table->boolean('is_logged_in')->default(false);

当用户登录时: LoginController.php

public function postLogin()
{
   // your validation

   // authentication check

   // if authenticated, update the is_logged_in attribute to true in users table
   auth()->user()->update(['is_logged_in' => true]);

   // redirect...
}

现在,每当用户尝试从其他浏览器或设备登录时,都应该检查该用户是否已经登录。所以,再次在 LoginController.php

public function index()
{
    if (auth()->check() && auth()->user()->is_logged_in == true) {
        // your error logic or redirect
    }

    return view('path.to.login');
}

当用户退出时: LogoutController.php

public function logout()
{
    auth()->user()->update(['is_logged_in' => false]);

    auth()->logout();

    // redirect to login page...
}