一个 Laravel 路由可以使用会话或令牌身份验证吗?

Can one Laravel route use either session or token authentication?

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

是否可以这样做,或者我是否必须使用不同的路由组前缀或其他方式定义所有路由两次?例如,我是否必须让所有 session auth API 端点看起来像 /ajax/api-endpoint 和所有 token auth API 端点看起来像 /api/api-endpoint?

感觉笨拙且随意 — 无论我使用哪种身份验证方法,我都想访问 /api/api-endpoint

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

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

web.php 中定义这条路线 Route::get('ajax/user', 'MyUserController@index')api.php 中的 Route::get('api/user', 'MyUserController@index') 因此可以在两条路由中使用完全相同的控制器方法,并且在您的控制器方法中使用 auth() 获取当前用户,无论是否使用 auth:api 或仅 auth auth() 将为您提供通过任一方法验证的用户。

假设您在 web.phpapi.php 中有组,并在组中应用了适当的中间件。