Используя Laravel 5.3, я создал веб-приложение, которое использует собственный API. Аутентификация успешно выполнена Passport. Веб-приложение использует промежуточное ПО аутентификации в маршрутах и модельных политиках для авторизации. Маршрутизация API использует защиту токена auth: api по умолчанию для управления доступом.
Я хотел бы использовать те же политики в приложении / политиках для авторизации API, а также для веб-аутентификации, но я не понимаю, как это сделать. Звонки типа $this->authorize('view', $model)
не работают. Полагаю, мне нужно как-то передать пользователя из Auth::guard('api')->user()
в Политики?
Любая помощь будет оценена по достоинству!
Обновление: все заработало.
Похоже, что даже для вызовов API Laravel все еще использовал пользователя из веб-защиты для проверки политик. Этот пользователь не определен для вызовов API. Поэтому мне нужно было сказать Laravel, что все вызовы API должны использовать api guard.
- Создайте новое промежуточное ПО с
Auth::shouldUse('api');
в функции дескриптора. - Назначьте промежуточное ПО разделу api в ядре.
Laravel теперь будет использовать api guard для всех запросов API. Вызовы типа $this->authorize('view', $model)
будут работать как в Интернете, так и в API.