Laravel为API使用auth()-> user()

时间:2018-11-02 15:38:04

标签: php laravel laravel-authorization

我有很多功能可以根据用户的权限执行操作。对于网络,一切正常。但是我正在慢慢地改用更多的ajax和更少的重新加载页面。但是,我无法在api控制器中使用我的函数,因为我使用

执行权限检查
auth()->user()->...

是否可以将其也用于我的api控制器?我知道我可以使用$request->user访问用户模型,但是如果这是唯一的机会,我想我必须复制我的所有函数,一个用于Web,一个用于api。是否还有其他更改可以重写我的功能,使其可以通过webapi控制器执行?

2 个答案:

答案 0 :(得分:1)

我认为,只要您仍然在api路由上使用'auth:api'中间件,就应该可以使用auth()->user()助手。

更新

如果您正在使用auth:api中间件,那么Laravel Passport会附带它(我建议)。

https://laravel.com/docs/5.7/passport#protecting-routes

答案 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');
}



因此,您将如何使用该方法完全是基于您的应用程序结构。