我有很多功能可以根据用户的权限执行操作。对于网络,一切正常。但是我正在慢慢地改用更多的ajax和更少的重新加载页面。但是,我无法在api控制器中使用我的函数,因为我使用
执行权限检查auth()->user()->...
是否可以将其也用于我的api控制器?我知道我可以使用$request->user
访问用户模型,但是如果这是唯一的机会,我想我必须复制我的所有函数,一个用于Web,一个用于api。是否还有其他更改可以重写我的功能,使其可以通过web
和api
控制器执行?
答案 0 :(得分:1)
我认为,只要您仍然在api路由上使用'auth:api'
中间件,就应该可以使用auth()->user()
助手。
更新
如果您正在使用auth:api
中间件,那么Laravel Passport会附带它(我建议)。
答案 1 :(得分:0)
API和Web是不同的概念,身份验证必须以不同的方式处理。
据我了解,您想使用API部分中与Web相关的控制器中的功能。
如果您用于内部目的,则可以在函数中使用其他变量以不检查身份验证(假设您的函数不需要用户提供的相关信息即可进行升级)。
EG:
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');
}
因此,您将如何使用该方法完全是基于您的应用程序结构。