Laravel api 使用 auth()->user()
Laravel use auth()->user() for api
我有很多函数可以根据用户的权限执行操作。对于网络,一切正常。但是我正在慢慢地更改为更多 ajax 和更少的重新加载页面。但是,我无法在我的 api 控制器中使用我的功能,因为我使用
执行权限检查
auth()->user()->...
我的 api 控制器是否也可以使用它?我知道我可以使用 $request->user
访问用户模型,但如果这是唯一的机会,我想我必须复制我的所有功能,一个用于网络,一个用于 api。是否有任何其他更改可以重写我的功能,它们可以从 web
和 api
控制器执行?
我想只要你还在你的 api 路由上使用 'auth:api'
中间件,你就应该能够使用 auth()->user()
助手。
更新
auth:api
中间件随 Laravel Passport 一起提供,如果您正在使用它(我推荐)。
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');
}
因此,您将如何处理完全取决于您的应用程序结构。
我有很多函数可以根据用户的权限执行操作。对于网络,一切正常。但是我正在慢慢地更改为更多 ajax 和更少的重新加载页面。但是,我无法在我的 api 控制器中使用我的功能,因为我使用
执行权限检查auth()->user()->...
我的 api 控制器是否也可以使用它?我知道我可以使用 $request->user
访问用户模型,但如果这是唯一的机会,我想我必须复制我的所有功能,一个用于网络,一个用于 api。是否有任何其他更改可以重写我的功能,它们可以从 web
和 api
控制器执行?
我想只要你还在你的 api 路由上使用 'auth:api'
中间件,你就应该能够使用 auth()->user()
助手。
更新
auth:api
中间件随 Laravel Passport 一起提供,如果您正在使用它(我推荐)。
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');
}
因此,您将如何处理完全取决于您的应用程序结构。