当我使用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');
});
但是当我尝试在此auth:api中间件之外登录用户详细信息时,它返回null。
api.php (without auth:api middleware return null)
Route::get('users/mentor_details/{uuid}','UserController@getMentorProfileDetails');
答案 0 :(得分:13)
如果未提供auth中间件,或未指定保护时提供,则使用默认保护来确定用户。除非您在config/auth.php
文件中对此进行了更改,否则默认警卫就是web
警卫。
因此,当您转到不受特定身份验证中间件保护的路由时,加载的用户是web
后卫提供的用户。
因此,即使您可能正在发送持有人令牌以使用特定用户,web
后卫也不会知道任何相关信息,因为您没有用户通过{{1登录警卫,你得到一个web
用户。
您有四种选择:
确保路由受null
中间件保护,该中间件指定auth:api
防护。但是,这不允许访客访问网址。
将您的默认警卫更改为api
文件中的api
。这可能不是你想要做的,特别是如果你有普通的网络用户。
告诉您希望config/auth.php
后卫的用户请求。 api
方法将后卫作为参数,因此如果您执行$request->user()
,它将使用$request->user('api')
后卫检索用户。
直接从api
后卫获取用户:api
。
答案 1 :(得分:2)
auth中间件是返回用户的中间件。 auth:api只表示使用api后卫。在laravel的源代码中,文件vendor / laravel / framework / src / Illuminate / Auth / Middleware / Authenticate.php第62行,函数shouldUse是设置Auth :: user()对象的函数。查看vendor / laravel / framework / src / Illuminate / Auth / AuthManager.php应该使用函数
答案 2 :(得分:0)
覆盖 createToken() 方法 app\Models\User.php,如下所示。
foreach ( $xml->business as $business ) {
if($business->country == 'UK') {
//Import the business
}
}
并在您想要的任何地方创建如下所示的令牌并明确传递 $user_id。
public function createToken($user_id,$name, array $scopes = [])
{
return Container::getInstance()->make(PersonalAccessTokenFactory::class)
->make(
$user_id, $name, $scopes
);
}
现在你会得到 $request->user()