Php laravel passport:Request user()在auth:api中间件外部和返回的用户对象内部返回null
当我尝试使用auth:api中间件获取loggedin用户详细信息时,它会在我的控制器函数中返回包含详细信息的用户对象Php laravel passport:Request user()在auth:api中间件外部和返回的用户对象内部返回null,php,laravel,Php,Laravel,当我尝试使用auth:api中间件获取loggedin用户详细信息时,它会在我的控制器函数中返回包含详细信息的用户对象 api.php (with auth:api middleware returns User object) Route::group(['middleware' => 'auth:api'], function() { Route::get('users/mentor_details/{uuid}','UserController@getMentorProfi
api.php (with auth:api middleware returns User object)
Route::group(['middleware' => 'auth:api'], function() {
Route::get('users/mentor_details/{uuid}','UserController@getMentorProfileDetails');
});
但当我试图在auth:api中间件之外获取loggedin用户详细信息时,它返回null
api.php (without auth:api middleware return null)
Route::get('users/mentor_details/{uuid}','UserController@getMentorProfileDetails');
auth中间件是返回用户的中间件。auth:api只是指示使用api保护。在laravel的源代码中,文件
vendor/laravel/framework/src/light/Auth/Middleware/Authenticate.php
line62,函数shouldUse是设置Auth::user()对象的函数。还可以查看vendor/laravel/framework/src/illumb/Auth/AuthManager.php
shouldUse函数如果未提供Auth中间件,或者未指定保护,则使用默认保护来确定用户。除非您在config/auth.php
文件中对此进行了更改,否则默认的保护是web
保护
因此,当您转到不受特定身份验证中间件保护的路由时,加载的用户就是web
guard提供的用户
因此,即使您可能正在发送承载令牌以使用特定用户,web
guard对此一无所知,并且由于您没有用户通过web
guard登录,因此您将获得一个null
用户
您有四种选择:
auth:api
中间件保护,该中间件指定api
保护。但是,这将不允许来宾访问urlconfig/auth.php
文件中将默认保护更改为api
。这可能不是您想要做的,尤其是如果您有普通的web用户api
guard告诉用户您想要的请求。$request->user()
api
guard获取用户:auth()->guard('api')->user()
public function createToken($user_id,$name, array $scopes = [])
{
return Container::getInstance()->make(PersonalAccessTokenFactory::class)
->make(
$user_id, $name, $scopes
);
}
并创建如下所示的令牌,并显式传递$user\u id
$user= new user();
$accessToken = $user->createToken($user_id,'authToken')->accessToken;
现在您将获得$request->user()$request->user('api');好多了,因为我的函数中已经有$request对象了。@patricus:很好的解释,伙计!我终于明白了我丢失的一小片拉威尔护照。非常感谢你!我是否必须在标题中使用某些内容??您还可以使用
auth
helper函数传递中间件名称<代码>身份验证('api')->用户()代码>