Laravel api 使用 auth()->user()

Laravel use auth()->user() for api

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

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

我的 api 控制器是否也可以使用它?我知道我可以使用 $request->user 访问用户模型,但如果这是唯一的机会,我想我必须复制我的所有功能,一个用于网络,一个用于 api。是否有任何其他更改可以重写我的功能,它们可以从 webapi 控制器执行?

我想只要你还在你的 api 路由上使用 'auth:api' 中间件,你就应该能够使用 auth()->user() 助手。

更新

auth:api 中间件随 Laravel Passport 一起提供,如果您正在使用它(我推荐)。

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

API 和 Web 是不同的概念,身份验证必须以不同方式处理。
据我了解,您想使用 API 部分中网络相关控制器的功能。
如果您用于内部目的,那么您可以在您的函数中使用其他变量来不检查身份验证(假设您的函数不需要用户相关信息来进行)。
例:

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



因此,您将如何处理完全取决于您的应用程序结构。