【发布时间】:2017-08-10 21:52:32
【问题描述】:
我有这样的代码:
public function createOrGetUser(Provider $provider)
{
$providerUser = $provider->user();
$providerName = class_basename($provider);
$token = $providerUser->token;
$account = SocialAccount::whereProvider($providerName)
->whereProviderUserId($providerUser->getId())
->first();
if ($account) {
return $account->user;
}else{
$account = new SocialAccount([
'provider_user_id' => $providerUser->getId(),
'provider' => $providerName
]);
$user = User::whereEmail($providerUser->getEmail())->first();
if($user->first()) {
if($providerName == "FacebookProvider") {
$user->facebook_token = $token;
}elseif($providerName == "TwitterProvider") {
$user->twitter_token = $token;
}else{
$user->google_token = $token;
}
$user->save();
}
if (!$user) {
$user = User::create([
'email' => $providerUser->getEmail(),
'name' => $providerUser->getName(),
'avatar' => $providerUser->getAvatar(),
]);
}
$account->user()->associate($user);
$account->save();
return $user;
}
}
唯一的问题是它永远不会检查 $providerName == "facebookprovider" 等并更新该用户的令牌。发生这种情况有什么特别的原因吗?
【问题讨论】:
-
使用
$user = User::whereEmail($providerUser->getEmail())->first();,您已经获得了一个对象。为什么,在下一行,你重复使用first()? -
为什么用这个
if($user->first())最好用if(!empty($user)) -
我试过 if(!empty($user)) 没用
-
尝试在 if 语句之前转储您的
$user
标签: laravel laravel-5 laravel-socialite