我正在尝试同时使用Socialite和JWT,但我遇到了一些问题。
如果用户已经存在,我的目标是更新数据库中用户的profile_image_url
字段并给他提供令牌,如果用户不存在,则创建它并给他提供令牌。
这就是我现在正在做的事情:
public function handleProviderCallback(Request $request){
try{
$providerUser = Socialite::driver('facebook')->stateless()->userFromToken($request->fb_token);
$user = User::query()->firstOrNew(['email' => $providerUser->getEmail()]);
}catch(Exception $e){
return new JsonResponse(['status' => 'error', 'message' => 'Woops, some error happened']);
}
if(!$user->exists){
$user->name = $providerUser->getName();
$user->profile_image_url = $providerUser->getAvatar();
$user = $user->save();
}else{
$user->update(['profile_image_url' => $providerUser->getAvatar()]);
}
$token = JWTAuth::fromUser($user);
return $this->onAuthorized($token, $user);
}
这就是我要回归的权利:
protected function onAuthorized($token, $user){
return new JsonResponse([
'status' => '40002',
'message' => 'Successfully logged in with facebook',
'user' => [
'user_id' => $user->id,
'name' => $user->name,
'email' => $user->email,
'profile_image_url' => $user->profile_image_url,
'token' => $token
]
]);
}
但如果用户不存在,这会在第一次尝试时给出以下错误,即使它将用户保存到数据库中也是如此:
类型错误:传递给Tymon \ JWTAuth \ JWT :: fromUser()的参数1必须 实现接口Tymon \ JWTAuth \ Contracts \ JWTSubject,给出布尔值, 呼唤 /var/www/goodzapp.com/api/vendor/illuminate/support/Facades/Facade.php 在第221行
我做错了什么?有人可以解释一下。任何帮助将不胜感激。