如何为经过身份验证的用户和未经过身份验证的用户创建路由

时间:2017-04-15 06:12:15

标签: laravel oauth routes middleware laravel-passport

我对auth:api中间件有问题! 当我为非认证用户定义这样的路由时,我们有一个可供经过身份验证的用户和未经过身份验证的用户访问的请求:

Route::post('{user}/leads', 'UsersController@getContact');

当访客用户请求此路由时,一切正常。 我可以通过$request->user();

访问用户

但是如果传递具有承载标头的令牌并且当然使用$request->user()的用户则不起作用!因为我们没有在此路线上使用auth:api,如果我们这样做,我们就无法访客用户访问此路线! 所以我找不到为两个经过身份验证的用户定义一条路由的方法,如果用户通过身份验证,我们会得到$request->user(),并且没有经过身份验证的用户也可以访问该路由!

提前致谢。

3 个答案:

答案 0 :(得分:4)

我找到了一种方法,我只是写了这个:

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

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

答案 1 :(得分:0)

如果您希望路由只对Authenticate用户可见,您可以将所有路由放在autra中间件中,默认情况下由laravel提供,您可以像这样: -

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

如果您想显示该路由,请同时对用户进行身份验证和非身份验证 你可以简单地放在中间件之外 Lik认为: -

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

希望你理解

答案 2 :(得分:0)

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

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

然后你不使用任何auth中间件。 <{1}}如果用户是访客,则为$user,否则应设置。{/ p>