Laravel Sanctum с множественным входом в систему

Добрый день, У меня есть приложение 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.

Мне трудно понять, в чем ваша проблема/что вы пытаетесь сделать. Можете ли вы уточнить, что вы имеете в виду, когда говорите: «Я должен разрешить пользователям входить в систему с тем же именем пользователя и паролем» и «Я пытаюсь войти в систему с тем же пользователем, что и аутентифицированный». Вы пытаетесь войти в систему, используя имя пользователя/пароль, который уже прошел аутентификацию/вошел в систему? Это должно сработать, поскольку сеанс создается для каждого входа в систему, независимо от того, под каким пользователем вы входите в систему. Я не знаю, почему вам нужно войти в систему на нескольких устройствах, но это должно работать 🤷‍♂️

Tim Lewis 04.07.2024 17:17

Привет, Тим, это правда. Мне нужно разрешить другому человеку на другом устройстве получить доступ к приложению с пользователем, который, возможно, уже прошел аутентификацию. В настоящее время конфигурация не позволяет мне войти в систему под пользователем на двух устройствах, так как на одном из них возникает ошибка 401. Надеюсь, я объяснился лучше.

Andrea Uberti 05.07.2024 09:30
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
2
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Привет, Андреа, надеюсь, у тебя хороший день. Если вы используете аутентификацию сеанса 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,
],
];

есть, надеюсь, это вам подойдет. Если у вас есть вопросы, не стесняйтесь отвечать здесь.

Привет, Эльмехди, надеюсь, тебе тоже хорошего дня! Это работает, большое спасибо

Andrea Uberti 09.07.2024 15:04

без проблем, Андреа 🙏

ELMEHDI ACHAHED 09.07.2024 16:24

Другие вопросы по теме