甚至可以在一条路线中拥有多个中间件 . 现在我有我的网络应用程序使用auth的中间件制作ajax请求,这是在auth:net默认
Route::post('/user/postAuthUserInfoAjax', [
'uses' => 'UserController@postAuthUserInfoAjax',
'middleware' => ['auth'],
]);
我还想要我的移动应用程序,它具有API访问令牌(使用laravel passport)来验证用户是否能够访问这些相同的路由 . 为了做到这一点,我只在我的中间件中指定'auth:api' .
Route::post('/user/postAuthUserInfoAjax', [
'uses' => 'UserController@postAuthUserInfoAjax',
'middleware' => ['auth:api'],
]);
唯一的问题是我无法指定多个中间件 . 我可以使用'auth:api'或'auth:web',但不能同时使用两者 . 我想我可以为每个ajax请求设置两个路由,一个用于web应用,另一个用于api请求,但如果我可以使用一个路由,那将会好得多 .
我试过了,但它不起作用 . 有谁知道如何做到这一点?它甚至可能吗?
Route::post('/user/postAuthUserInfoAjax', [
'uses' => 'UserController@postAuthUserInfoAjax',
'middleware' => ['auth:web','auth:api'],
]);
1 回答
这不起作用,因为你说的如下:
你可以解决这个问题的一种方法是只有两个控制器,但扩展一个基本控制器,其功能已经被烘焙:
然后你应该相应地设置路线组:
然后为您的API请求:
这是我们将在 both 组中的路线:
然后基本控制器看起来像这样:
Note 我输入的内容无法访问实际代码,因此
$user->getFillable()
可能会返回一个集合,要求您将其转换为数组 . 如果是这种情况,只需将$user->getFillable()->toArray()
链接到最后 .这样做的神奇之处在于,如果进程成功请求,您可以使用
.done()
在promise对象上捕获它 . 如果失败,那么你将收到422 Unprocessable Entity in Request
消息,这将在promise对象上触发.fail()
.现在,只需从
API/Web
UserControllers中扩展此基数UserController
:虽然您必须进行一些逻辑重复,但为了清晰起见,在整个应用程序堆栈中保持这种分离级别非常重要 . 如果您仍然需要更改任一路径的内容,此方法仍然允许您进行一定程度的粒度控制,但为您提供了工作的基础 .
希望这会有所帮助 .