laravel passport:请求user()在auth:api中间件之外返回null,并返回用户对象内部

NAV*_*MAR 5 php laravel

当我使用auth:api中间件获取登录用户详细信息时,它会在我的控制器函数中返回包含详细信息的用户对象.

api.php (with auth:api middleware returns User object)

Route::group(['middleware' => 'auth:api'], function() {
    Route::get('users/mentor_details/{uuid}','UserController@getMentorProfileDetails');
});
Run Code Online (Sandbox Code Playgroud)

但是当我试图在此auth:api中间件之外登录用户详细信息时,它返回null.

api.php (without auth:api middleware return null)

Route::get('users/mentor_details/{uuid}','UserController@getMentorProfileDetails');
Run Code Online (Sandbox Code Playgroud)

pat*_*cus 22

如果未提供auth中间件,或未指定防护,则使用默认防护来确定用户.除非你在config/auth.php文件中更改了此内容,否则默认后卫就是web后卫.

因此,当您转到不受特定身份验证中间件保护的路由时,加载的用户是web后卫提供的用户.

因此,即使您可能正在发送持有者令牌以使用特定用户,但是web警卫对此没有任何了解,并且由于您没有用户通过web警卫登录,因此您正在获得null用户.

你有四个选择:

  1. 确保路由受auth:api中间件保护,中间件指定api防护.但是,这不允许访客访问网址.

  2. 将默认警卫更改为api您的config/auth.php文件.这可能不是你想要做的,特别是如果你有普通的网络用户.

  3. 告诉您希望用户来自api警卫的请求.该$request->user()方法将guard作为参数,因此如果这样做$request->user('api'),它将使用apiguard 检索用户.

  4. api直接从警卫处获取用户:auth()->guard('api')->user().

  • $ request-> user('api'); 更好,因为我的函数中已经有$ request对象。 (2认同)