Добрый день, У меня есть приложение 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.
Привет, Тим, это правда. Мне нужно разрешить другому человеку на другом устройстве получить доступ к приложению с пользователем, который, возможно, уже прошел аутентификацию. В настоящее время конфигурация не позволяет мне войти в систему под пользователем на двух устройствах, так как на одном из них возникает ошибка 401. Надеюсь, я объяснился лучше.
Привет, Андреа, надеюсь, у тебя хороший день. Если вы используете аутентификацию сеанса laravel и хотите разрешить одному и тому же пользователю входить в систему с нескольких устройств одновременно (как вы упомянули в комментариях), вам нужно настроить laravel по умолчанию конфигурация аутентификации
перейдите в config/session.php и убедитесь, что у вас есть expire_on_close => false
'driver' => env('SESSION_DRIVER', 'file'),
'время жизни' => env('SESSION_LIFETIME', 120),
'expire_on_close' => ложь,
чтобы сеанс не истекал при закрытии браузера
2- промежуточное программное обеспечение
по умолчанию управление сеансами laravel middleware 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,
],
];
есть, надеюсь, это вам подойдет. Если у вас есть вопросы, не стесняйтесь отвечать здесь.
Привет, Эльмехди, надеюсь, тебе тоже хорошего дня! Это работает, большое спасибо
без проблем, Андреа 🙏
Мне трудно понять, в чем ваша проблема/что вы пытаетесь сделать. Можете ли вы уточнить, что вы имеете в виду, когда говорите: «Я должен разрешить пользователям входить в систему с тем же именем пользователя и паролем» и «Я пытаюсь войти в систему с тем же пользователем, что и аутентифицированный». Вы пытаетесь войти в систему, используя имя пользователя/пароль, который уже прошел аутентификацию/вошел в систему? Это должно сработать, поскольку сеанс создается для каждого входа в систему, независимо от того, под каким пользователем вы входите в систему. Я не знаю, почему вам нужно войти в систему на нескольких устройствах, но это должно работать 🤷♂️