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

Api 一个Laravel路由可以使用会话或令牌身份验证吗?,api,authentication,laravel-5.4,laravel-authorization,Api,Authentication,Laravel 5.4,Laravel Authorization,我正在Laravel5.4中定义API路由。这些路由中的大多数都需要身份验证,我希望能够使用以下任一方法进行身份验证: 令牌身份验证,即auth:api(由不同域上的其他web应用程序使用) 或者在主web应用程序中使用会话/cookie身份验证,即auth,用于AJAX请求 是否可以这样做,或者我必须使用不同的路由组前缀或其他内容定义所有路由两次?例如,我是否必须让所有会话身份验证API端点看起来像/ajax/API endpoint,而所有令牌身份验证API端点看起来像/API/API

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

  • 令牌身份验证,即
    auth:api
    (由不同域上的其他web应用程序使用)
  • 或者在主web应用程序中使用会话/cookie身份验证,即
    auth
    ,用于AJAX请求
是否可以这样做,或者我必须使用不同的路由组前缀或其他内容定义所有路由两次?例如,我是否必须让所有会话身份验证API端点看起来像
/ajax/API endpoint
,而所有令牌身份验证API端点看起来像
/API/API endpoint

这感觉既笨拙又随意——我想访问
/api/api端点
,而不管我使用的是什么身份验证方法

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


Route::get('api/user','MyUserController@index')->中间件(['auth','auth:api'])

定义此路由
route::get('ajax/user','MyUserController@index)
in
web.php
Route::get('api/user','MyUserController@index“)
api.php
中,因此可以在两个路由中使用完全相同的控制器方法,并且在控制器方法中,使用
auth()
获取当前用户,无论是使用
auth:api
还是仅使用auth
auth()执行身份验证
将为您提供通过任一方法进行身份验证的用户


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

定义此路由
route::get('ajax/user','MyUserController@index)
in
web.php
Route::get('api/user','MyUserController@index“)
api.php
中,因此可以在两个路由中使用完全相同的控制器方法,并且在控制器方法中,使用
auth()
获取当前用户,无论是使用
auth:api
还是仅使用auth
auth()执行身份验证
将为您提供通过任一方法进行身份验证的用户


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

您是否尝试了路由/api.php?是的,尽管在
api.php
中定义的路由在其URL中自动添加了/api前缀,因此,我不得不将/ajax/*路由放在
web.php
中,这本身就是另一种令人不快的情况。您是否尝试了路由/api.php?是的,尽管
api.php
中定义的路由自动在其URL前面加上了/api前缀,因此,我不得不将/ajax/*路由放在
web.php
——这本身就是另一种令人不快的情况,谢谢你的回答。本质上,你是说没有办法避免创造一个任意的第二个URL,这样我就可以使用两种身份验证方法?我认为你可以定义你自己的中间件,在该中间件中通过web驱动程序或api驱动程序检查你的自身份验证,如果你发现用户为该请求设置了用户,然后在中间件中调用下一个,这样你就可以结束使用单路由和围绕原始authAh的包装中间件是的,这是有意义的-只要有两个URL就容易多了,所以我想我会这样做:)谢谢你的回答。本质上,你是说没有办法避免创造一个任意的第二个URL,这样我就可以使用两种身份验证方法?我认为你可以定义你自己的中间件,在该中间件中通过web驱动程序或api驱动程序检查你的自身份验证,如果你发现用户为该请求设置了用户,然后在中间件中调用下一个,这样你就可以结束使用单路由和围绕原始authAh的包装器中间件是的,这很有意义-只需要有两个URL就容易多了,所以我想我会这么做:)