我遇到了一个auth:api中间件的问题!当我为非认证用户定义了一个如下的路由时,我们有一个请求,认证用户和非认证用户都可以访问:
Route::post('{user}/leads', 'UsersController@getContact');
当客人用户请求此路由时,一切正常。是,我可以使用$request->user();
访问用户
但如果通过带有bearer头的令牌并获得带有$request->user()
的用户,则当然不起作用!因为我们没有在此路由上使用auth:api
,如果我们使用了auth:api
,则无法通过访客用户访问此路由!因此,我无法找到为两个已验证用户定义一个路由的方法,即如果用户已验证,则获得$request->user()
,而任何已验证用户也无法访问此路由!
先谢谢你。
6条答案
按热度按时间o8x7eapl1#
我找到了一个方法我只是写了这个:
在api.php路径文件中,它工作正常。谢谢
cczfrluj2#
这是因为
Auth
使用默认的web
保护。您必须手动检查api
保护:如果用户是guest,则不使用任何
auth
中间件。$user
将为null
,否则应设置。nwlls2ji3#
我使用的解决方案是为auth创建一个新的中间件:
在我的路线的底部我做了:
这样,如果需要Auth,它将为请求分配正确的用户,否则它将以guest身份继续。
a11xaf1n4#
如果您希望路由只对认证用户可见,您可以将所有路由放在laravel默认提供的认证中间件中,您可以这样放置:-
如果你想显示路由验证和非验证用户,你可以简单地把中间件外部像:-
希望你能理解
yzxexxkh5#
我想使用额外的路由验证和非验证用户,但关于主题我添加一个简单的方法:
在Controller的
__constructor
函数上添加以下行:但我并不把这种方式作为最佳实践,这违反了单一责任原则。
tpgth1q76#
如果您使用的是Laravel Passport,那么这种方式可以更干净。
在控制器中,您可以通过
这将为您获取经过身份验证的用户,如果不记名令牌无效,则不会抛出“未验证”错误,而是导致空用户。
参考:How to authenticate user without auth:api middleware in laravel 5.3?