Конкретные стратегии Laravel Passport - PullRequest
0 голосов
/ 10 мая 2019

Я, возможно, смешиваю вещи из-за моего непонимания, и, вероятно, есть лучший (единый) подход ко всему этому, поэтому я открываюсь для сообщества.

В контексте Laravel 5.8, используя Passport, я пытаюсь добиться следующего: - «Обычного» веб-сайта, где пользователь входит в систему и имеет доступ к страницам и формам - API для веб-сайта.Некоторые маршруты открыты, некоторые маршруты закрыты, некоторые маршруты являются обоими (в том смысле, что вы можете нажать на них, выполнив вход или нет, но они будут вести себя по-разному) - Выделенный API для других клиентов со специализированными маршрутами - Панель администратора (не имеет значения длясейчас, но с использованием рюкзака)

Моя проблема здесь состоит в том, чтобы аутентифицировать и приложение, и пользователя для API веб-сайта, не обязательно одновременно (поэтому я могу использовать свои маршруты до входа в систему, но все же знаю, чтоклиент мой интерфейс javascript).

Я начал с промежуточного программного обеспечения CreateFreshApiToken, которое генерировало cookie при входе пользователя. Это работало нормально.Затем я попытался создать механизм аутентификации моего приложения перед входом в систему. Я использовал учетные данные клиента с промежуточным программным обеспечением CheckClientCredentials, и это прекрасно работает, когда пользователь не аутентифицирован.Приложение My Vue сделает первый вызов, чтобы получить свой токен и установить его в заголовке любого последующего запроса.Теперь я пытаюсь объединить обе стратегии (или, точнее, переключиться с одной на другую).

Таким образом, токен-носитель работает для маршрутов за промежуточным программным обеспечением CheckClientCredentials, но не для маршрутов, также охраняемых auth:промежуточное программное обеспечение API (но auth да).Мои cookie все еще установлены и отправлены, а также токен на предъявителя.Я все еще получаю {"message":"Unauthenticated."} от API.Если я удаляю промежуточное ПО CheckClientCredentials, оно работает.

Теперь я не уверен, куда идти .. Должен ли я попытаться переопределить логин (не уверен, где, но это не самая сложная часть), чтобы выдать токен пользователю (означает ли это, что мне нужно будетиспользовать клиент для предоставления пароля?), и попытаться установить его в качестве заголовка авторизации в клиенте?Таким образом, удалить бит cookie?Или я должен попытаться заставить их работать вместе, чтобы избежать этого (и я предполагаю, что это будет что-то, что нужно установить на стороне Паспорта, но я не знаю, как это сделать) (думаю, это будет означатьперевод аутентифицированного пользователя из Auth в Passport?).

Вероятно, сценарий использования не является чем-то необычным, но, кажется, трудно найти учебник, пытающийся объяснить эту ситуацию ..

Извините, если неясно!Любая помощь / подсказка / руководство будут оценены :) Спасибо!

...