I have a code like this:
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;
}
}
The only problem with that is it never runs the check for $providerName == "facebookprovider" etc and update the token for that user. Is there any particular reason for why this is happening?