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