where('provider_user_id', $providerUser->id) ->first(); } /** * Try to retrieve user by their e-mail * (!!! this is coupled to the application code !!!) * * @param ProviderUser $providerUser * @return User|Model|null|object */ public function getByEmail(ProviderUser $providerUser) { $first = User::where('email', $providerUser->email)->first(); if($first->email) return $first; return null; } public function flush(Model $user, string $provider) { OAuthIdentity::where('user_id', $user->getKey()) ->where('provider', $provider) ->delete(); } public function store(OAuthIdentity $identity) { $identity->save(); } public function userExists(string $provider, ProviderUser $providerUser, bool $allowByEmail) { $byProvider = (bool) $this->getByProvider($provider, $providerUser); if ($byProvider) return true; if (!$allowByEmail) return false; if ($providerUser->email) { $byEmail = $this->getByEmail($providerUser); if ($byEmail) return true; } return false; } }