/** * Find or create a member from the given resource owner ("user") * * @todo Implement $overwriteExisting. Could use priorities? I.e. Facebook data > Google data * @param ResourceOwnerInterface $user * @param string $providerName * @return Member * @throws TokenlessUserExistsException */ protected function memberFromResourceOwner(ResourceOwnerInterface $user, $providerName) { $member = Member::get()->filter(['Email' => $user->getEmail()])->first(); if (!$member) { $member = Member::create(); } if ($member->isInDB() && !$member->AccessTokens()->count()) { throw new TokenlessUserExistsException('A user with the email address linked to this account already exists.'); } $overwriteExisting = false; // @todo if ($overwriteExisting || !$member->isInDB()) { $member = $this->getMapper($providerName)->map($member, $user); $member->write(); } return $member; }
/** * {@inheritdoc} */ protected function getIdentification(ResourceOwnerInterface $resourceOwner) { return ['email' => $resourceOwner->getEmail()]; }
/** * Add an OAuth2 client data * * @param string $provider * @param ResourceOwnerInterface $resourceOwner * * @return Profile */ public static function createFromResourceOwner($provider, ResourceOwnerInterface $resourceOwner) { $classname = get_called_class(); $class = new $classname(); $class->provider = $provider; $class->uid = $resourceOwner->getId(); $class->nickname = $resourceOwner->getNickname(); $class->name = $resourceOwner->getName(); $class->firstName = $resourceOwner->getFirstName(); $class->lastName = $resourceOwner->getLastName(); $class->email = $resourceOwner->getEmail(); $class->imageUrl = $resourceOwner->getImageurl(); $class->urls = $resourceOwner->getUrl(); return $class; }