如何为已通过身份验证的用户和未通过身份验证的用户创建路由
我有auth:api中间件的问题! 我们有一个要求,即对于两个身份验证的用户和未通过认证的用户访问时,我定义为未通过认证的用户这样的路线:如何为已通过身份验证的用户和未通过身份验证的用户创建路由
Route::post('{user}/leads', '[email protected]');
这是确定一切都正常工作时,来宾用户请求这条路线。 是,我可以访问用户与$request->user();
但如果通令牌承载头,并与当然行不通的$request->user()
获取用户!因为我们没有在这条路线上使用auth:api
,如果我们这样做,我们无法访问该用户的路线! 所以我无法找到一种方式,我们为两个经过身份验证的用户定义了一条路由,如果用户通过身份验证,我们会得到$request->user()
,并且没有经过身份验证的用户也可以访问该路由!
在此先感谢。
我发现了一个办法做到这一点我刚才写的:
$middleware = ['api'];
if (\Request::header('Authorization'))
$middleware = array_merge(['auth:api']);
Route::group(['prefix' => 'v1', 'namespace' => 'Api', 'middleware' => $middleware], function() {
//routes here
});
在api.php路由文件,它工作正常。 谢谢
您是否找到另一种更好的方法来执行此操作? –
如果你想要的路线是可见的唯一身份验证的用户,你可以把身份验证的中间件的所有路由是默认的laravel前提是你可以把这样的: -
enter code here
Route::group(['middleware' => ['auth']], function() {
Route::post('{user}/leads', '[email protected]');
});
如果你想显示路线都进行认证和非认证用户 您可以简单地把中间件 外沥即: -
Route::match(['get', 'post'], '/cms-page','[email protected]');
希望你能理解
我想这里是一个小姐undrestanding的问题! 我不想重写已认证的用户和未认证的用户均可访问的路由,例如,报告可以由已验证的用户和未经过验证的用户创建 –
这是因为Auth
使用默认的web
后卫。你必须检查手动api
后卫:
$user = Auth::user() ?? Auth::guard("api")->user();
那你不使用任何auth
中间件。如果用户是来宾,则$user
将为null
,否则应该设置。
谢谢,但我不想在每个函数中都这样做,并检查用户是否存在 –
您需要为此类定制创建自己的中间件。 –
我不明白为什么需要'auth:api'才能使用户可用。 auth:api中间件仅在有效用户令牌不存在时拒绝对路由的请求。它不会神奇地使令牌可用。通常你会做一个'Auth :: check()'来确定是否有一个有效的用户访问路由。 – apokryfos