2017-04-15 180 views
1

我有auth:api中间件的问题! 我们有一个要求,即对于两个身份验证的用户和未通过认证的用户访问时,我定义为未通过认证的用户这样的路线:如何为已通过身份验证的用户和未通过身份验证的用户创建路由

Route::post('{user}/leads', '[email protected]'); 

这是确定一切都正常工作时,来宾用户请求这条路线。 是,我可以访问用户与$request->user();

但如果通令牌承载头,并与当然行不通的$request->user()获取用户!因为我们没有在这条路线上使用auth:api,如果我们这样做,我们无法访问该用户的路线! 所以我无法找到一种方式,我们为两个经过身份验证的用户定义了一条路由,如果用户通过身份验证,我们会得到$request->user(),并且没有经过身份验证的用户也可以访问该路由!

在此先感谢。

+0

您需要为此类定制创建自己的中间件。 –

+1

我不明白为什么需要'auth:api'才能使用户可用。 auth:api中间件仅在有效用户令牌不存在时拒绝对路由的请求。它不会神奇地使令牌可用。通常你会做一个'Auth :: check()'来确定是否有一个有效的用户访问路由。 – apokryfos

回答

2

我发现了一个办法做到这一点我刚才写的:

$middleware = ['api']; 
if (\Request::header('Authorization')) 
    $middleware = array_merge(['auth:api']); 
Route::group(['prefix' => 'v1', 'namespace' => 'Api', 'middleware' => $middleware], function() { 
    //routes here 
}); 

在api.php路由文件,它工作正常。 谢谢

+0

您是否找到另一种更好的方法来执行此操作? –

0

如果你想要的路线是可见的唯一身份验证的用户,你可以把身份验证的中间件的所有路由是默认的laravel前提是你可以把这样的: -

enter code here 
Route::group(['middleware' => ['auth']], function() { 
Route::post('{user}/leads', '[email protected]'); 
}); 

如果你想显示路线都进行认证和非认证用户 您可以简单地把中间件 外沥即: -

Route::match(['get', 'post'], '/cms-page','[email protected]'); 

希望你能理解

+0

我想这里是一个小姐undrestanding的问题! 我不想重写已认证的用户和未认证的用户均可访问的路由,例如,报告可以由已验证的用户和未经过验证的用户创建 –

0

这是因为Auth使用默认的web后卫。你必须检查手动api后卫:

$user = Auth::user() ?? Auth::guard("api")->user(); 

那你不使用任何auth中间件。如果用户是来宾,则$user将为null,否则应该设置。

+0

谢谢,但我不想在每个函数中都这样做,并检查用户是否存在 –

相关问题