0

我在 Laravel 5.4 中定义我的 API 路由。这些路由中的大多数都需要身份验证,我希望能够使用以下任一方式进行此身份验证:

  • 令牌身份验证即auth:api(由不同域上的其他 Web 应用程序使用)
  • 或使用 session/cookie auth 即auth,用于主 Web 应用程序中的 AJAX 请求

是否可以这样做,或者我是否必须使用不同的路由组前缀或其他东西定义我的所有路由两次?例如,我是否必须让所有会话身份验证API 端点看起来像/ajax/api-endpoint所有令牌身份验证API 端点看起来像/api/api-endpoint

/api/api-endpoint这感觉很笨拙和随意——无论我使用什么身份验证方法,我都想访问。

如下指定两者authauth:api中间件似乎使 Laravel 在成功之前需要两种 auth 方法,而不是只需要任何一种:

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

4

1 回答 1

2

Route::get('ajax/user', 'MyUserController@index')在 inweb.phpRoute::get('api/user', 'MyUserController@index')in 中定义此路由,api.php因此可以在两个路由中使用完全相同的控制器方法,并且在您的控制器方法中使用auth()来获取当前用户,无论是否使用执行身份验证,auth:api或者只有 authauth()会给您通过身份验证的用户任何一种方法。

假设您有分组web.php并且api.php将适当的中间件应用于分组。

于 2017-03-14T10:19:00.730 回答