Laravel Sanctum 具有多重登录功能

问题描述 投票:0回答:1

美好的一天, 我有一个 Laravel 8 应用程序,其登录页面由 Sanctum 处理。 我必须让用户使用相同的用户名和密码登录。我该怎么做? 我认为这是 RedirectIfAuthenticated 中间件的问题,但我不知道如何更新它。

这是我的 .env 文件的一部分,我不知道它是否有用:

BROADCAST_DRIVER=log
CACHE_DRIVER=file
FILESYSTEM_DRIVER=local
QUEUE_CONNECTION=sync
#SESSION_DRIVER=file
SESSION_DRIVER=cookie
SESSION_LIFETIME=120

尝试更改 RedirectIfAuthenticated 中间件,但当我尝试使用与经过身份验证的用户相同的用户登录时,它会出现 401 错误。

laravel laravel-sanctum
1个回答
0
投票

嗨,Andrea,希望您度过愉快的一天,如果您使用 Laravel 会话身份验证并且希望允许同一用户同时从多个设备登录(正如您在评论中提到的),您需要调整默认值Laravel 身份验证配置

转到 config/session.php 并确保有 expire_on_close => false

'driver' => env('SESSION_DRIVER', 'file'),

'生命周期' => env('SESSION_LIFETIME', 120),

'expire_on_close' => false,

因此当浏览器关闭时会话不会过期

2-中间件

默认的 Laravel 会话管理中间件 startSession 确保一次只有一个用户可以拥有活动会话,唯一可以解决此问题的解决方案是创建一个新的中间件并将其实现到内核中

php artisan make:middleware AllowMultipleSessions //to create custom middleware

//您的自定义中间件

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class AllowMultipleSessions
{
    public function handle($request, Closure $next, ...$guards)
    {
        foreach ($guards as $guard) {
            if (Auth::guard($guard)->check()) {
                // this check if the user already logged in so it gonna let him login normally
                return $next($request);
            }
        }
        return $next($request);
    }
}

3-将你的中间件注册到内核中

protected $middlewareGroups = [
'web' => [
    \App\Http\Middleware\AllowMultipleSessions::class,
    \Illuminate\Session\Middleware\AuthenticateSession::class,
],
];

有,希望对您有用,如果您有疑问,请随时在这里回复

© www.soinside.com 2019 - 2024. All rights reserved.