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

时间:2017-03-14 06:05:06

标签: api authentication laravel-5.4 laravel-authorization

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

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

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

感觉笨拙和随意 - 我想访问/api/api-endpoint,无论我使用的是auth方法。

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

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

1 个答案:

答案 0 :(得分:2)

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

假设您在web.phpapi.php中拥有适当的中间件应用于群组的群组。