Может ли один маршрут Laravel использовать аутентификацию сеанса или токена?

Я определяю свои маршруты API в Laravel 5.4. Для большинства этих маршрутов требуется аутентификация, и я хотел бы иметь возможность выполнить эту аутентификацию, используя:

  • аутентификация по токену, то есть auth:api (используется другими веб-приложениями в разных доменах)
  • или используя аутентификацию сеанса / cookie, т.е. auth, для запросов AJAX в основном веб-приложении

Возможно ли это сделать, или мне нужно определять все мои маршруты дважды, с другим префиксом группы маршрутов или чем-то еще? например. Должен ли я, чтобы все конечные точки API аутентификации сеанса выглядели как /ajax/api-endpoint, а все конечные точки API аутентификации по токенам выглядели как /api/api-endpoint?

Это кажется неуклюжим и произвольным - я хочу получить доступ к /api/api-endpoint независимо от метода аутентификации, который я использую.

Указание как auth, так и auth:api промежуточного программного обеспечения следующим образом, по-видимому, заставляет Laravel требовать ОБОИХ методов аутентификации перед успешным выполнением, вместо того, чтобы просто требовать одного из них:

Route::get('api/user', 'MyUserController@index')->middleware(['auth', 'auth:api']);


person jeff-h    schedule 14.03.2017    source источник
comment
Вы пробовали routes / api.php?   -  person train_fox    schedule 14.03.2017
comment
Да, хотя маршруты, определенные в api.php, имеют префикс / api к их URL-адресу автоматически, поэтому мне пришлось поместить маршруты / ajax / * в web.php - что на самом деле является еще одной неприятной ситуацией, лол   -  person jeff-h    schedule 15.03.2017


Ответы (1)


определите этот маршрут Route::get('ajax/user', 'MyUserController@index') в web.php и Route::get('api/user', 'MyUserController@index') в api.php, чтобы в обоих маршрутах можно было использовать один и тот же метод контроллера, а в методе вашего контроллера используйте auth() для получения текущего пользователя независимо от того, выполняется ли аутентификация с использованием auth:api или только auth auth() даст вы пользователь, аутентифицированный одним из методов.

предполагая, что у вас есть группа в web.php и api.php с соответствующим промежуточным программным обеспечением, примененным к группе.

person Sagar Rabadiya    schedule 14.03.2017
comment
Спасибо за Ваш ответ. По сути, вы говорите, что невозможно избежать создания произвольного второго URL-адреса только для того, чтобы я мог использовать два метода аутентификации? - person jeff-h; 15.03.2017
comment
Я думаю, вы можете определить свое собственное промежуточное программное обеспечение, и в этом промежуточном программном обеспечении проверьте свою собственную аутентификацию либо с помощью веб-драйвера, либо с помощью драйвера api, и если вы обнаружите, что пользователь установил пользователя для этого запроса и вызовет следующий в промежуточном программном обеспечении, таким образом, вы можете получить один маршрут и промежуточное ПО оболочки вокруг raw auth - person Sagar Rabadiya; 15.03.2017
comment
Ах да, это имеет смысл - гораздо проще иметь два URL-адреса, так что я думаю, что сделаю это :) - person jeff-h; 16.03.2017