Laravel 使用 auth()->user() 作为 api
Posted
技术标签:
【中文标题】Laravel 使用 auth()->user() 作为 api【英文标题】:Laravel use auth()->user() for api 【发布时间】:2019-04-06 21:05:11 【问题描述】:我有很多基于用户权限执行操作的函数。对于网络,一切正常。但我正在慢慢地改变为更多的 ajax 和更少的重新加载页面。但是,我无法在我的 api 控制器中使用我的函数,因为我使用
执行权限检查auth()->user()->...
我的 api 控制器也可以使用它吗?我知道我可以使用$request->user
访问用户模型,但如果这是唯一的机会,我想我必须复制我的所有功能,一个用于 web,一个用于 api。是否有任何其他更改可以重写我的函数,它们可以通过web
和api
控制器执行?
【问题讨论】:
在 API 调用的情况下您还希望进行身份验证检查吗? 值得一提的是,如果auth()->user()
不起作用,$request->user()
也不应该起作用。它们都由身份验证中间件提供。
【参考方案1】:
我认为只要你还在你的 api 路由上使用 'auth:api'
中间件,你应该可以使用 auth()->user()
助手。
更新
auth:api
中间件随 Laravel Passport 一起提供(如果你正在使用它)(我推荐)。
https://laravel.com/docs/5.7/passport#protecting-routes
【讨论】:
【参考方案2】:API 和 Web 是不同的概念,必须以不同的方式处理身份验证。 据我了解,您希望在 API 部分使用 Web 相关控制器的功能。 如果您用于内部目的,那么您可以在函数中添加其他变量来不检查身份验证(假设您的函数不需要用户相关信息来进行)。 例如:
function showRecord($api = false)
if($api)
//don't authenticate
else
//authenticate
//rest of the code here
另一种方式 将常用代码拆分为一个函数,根据您的需要在 api 控制器或 web 控制器中调用。 EG:(所有三个控制器必须在同一个命名空间中,或者如果它们在不同的命名空间中,则必须正确使用它们):
// Controller: CommonController
function myCommonfunction($var)
//db query or any processing
//function from api controller
function doSomethingApi()
$ctrl = new CommonController();
$res = $ctrl->myCommonfunction('test');
return $res
//function from webcontroller
function doSomething()
$ctrl = new CommonController();
$res = $ctrl->myCommonfunction('web');
因此,您将如何处理完全取决于您的应用程序结构。
【讨论】:
以上是关于Laravel 使用 auth()->user() 作为 api的主要内容,如果未能解决你的问题,请参考以下文章
Laravel文档阅读笔记-How to use @auth and @guest directives in Laravel
Laravel文档阅读笔记-Custom Authentication Login And Registration Using Laravel 8
Laravel文档阅读笔记-Custom Authentication Login And Registration Using Laravel 8