我在Laravel 5.4中定义了我的API路由。大多数这些路由需要身份验证,我希望能够使用以下任一方式执行此身份验证:
auth:api
(由不同域上的其他网络应用使用)auth
,用于主Web应用程序中的AJAX请求是否可以这样做,或者我必须两次定义所有路由,使用不同的路由组前缀或其他内容?例如,我是否必须使所有会话身份验证 API端点看起来像/ajax/api-endpoint
,并且所有令牌身份验证 API端点看起来像/api/api-endpoint
?
感觉笨拙和随意 - 我想访问/api/api-endpoint
,无论我使用的是auth方法。
如下所示指定auth
和auth:api
中间件似乎使得Laravel在成功之前需要两种auth方法,而不是只需要其中任何一种:
Route::get('api/user', 'MyUserController@index')->middleware(['auth', 'auth:api']);
答案 0 :(得分:2)
在Route::get('ajax/user', 'MyUserController@index')
中定义此路线web.php
Route::get('api/user', 'MyUserController@index')
和api.php
中的auth()
因此可以在两个路由中使用完全相同的控制器方法,并且在您的控制器方法中使用auth:api
来获取当前用户,无论是否使用{执行身份验证{1}}或只有身份验证auth()
会为您提供通过一种方法进行身份验证的用户。
假设您在web.php
和api.php
中拥有适当的中间件应用于群组的群组。