OWAでユーザーにログインさせるためにHWIOAuthBundleを使用しています。存在しない場合にユーザーを作成するカスタムユーザープロバイダーを作成しました。Symfony2:いくつかのフィールドが見つからない場合、ログイン後にユーザー登録を完了させる
public function loadUserByOAuthUserResponse(UserResponseInterface $response)
{
$attr = $response->getResponse();
switch($response->getResourceOwner()->getName()) {
case 'google':
if(!$user = $this->userRepository->findOneByGoogleId($attr['id'])) {
if(($user = $this->userRepository->findOneByEmail($attr['email'])) && $attr['verified_email']) {
$user->setGoogleId($attr['id']);
if(!$user->getFirstname()) {
$user->setFirstname($attr['given_name']);
}
if(!$user->getLastname()) {
$user->setLastname($attr['family_name']);
}
$user->setGoogleName($attr['name']);
}else{
$user = new User();
$user->setUsername($this->userRepository->createUsernameByEmail($attr['email']));
$user->setEmail($attr['email']);
$user->setFirstname($attr['given_name']);
$user->setLastname($attr['family_name']);
$user->setPassword('');
$user->setIsActive(true);
$user->setGoogleId($attr['id']);
$user->setGoogleName($attr['name']);
$user->addGroup($this->groupRepository->findOneByRole('ROLE_USER'));
$this->entityManager->persist($user);
}
}
break;
case 'facebook':
if(!$user = $this->userRepository->findOneByFacebookId($attr['id'])) {
if(($user = $this->userRepository->findOneByEmail($attr['email'])) && $attr['verified']) {
$user->setFacebookId($attr['id']);
if(!$user->getFirstname()) {
$user->setFirstname($attr['first_name']);
}
if(!$user->getLastname()) {
$user->setLastname($attr['last_name']);
}
$user->setFacebookUsername($attr['username']);
}else{
$user = new User();
$user->setUsername($this->userRepository->createUsernameByEmail($attr['email']));
$user->setEmail($attr['email']);
$user->setFirstname($attr['first_name']);
$user->setLastname($attr['last_name']);
$user->setPassword('');
$user->setIsActive(true);
$user->setFacebookId($attr['id']);
$user->setFacebookUsername($attr['username']);
$user->addGroup($this->groupRepository->findOneByRole('ROLE_USER'));
$this->entityManager->persist($user);
}
}
break;
}
$this->entityManager->flush();
if (null === $user) {
throw new AccountNotLinkedException(sprintf("User '%s' not found.", $attr['email']));
}
return $user;
}
問題は、Twitterユーザーがメールを送信しない、または新しいユーザーが作成される前にいくつかの追加フィールドを追加したいということです。作成する前にユーザーを「完全登録」フォームにリダイレクトする方法はありますか?
リクエストリスナーを追加しようとしました。リクエストごとに、ユーザーがログに記録されている場合はメールがあるかどうかをチェックし、そうでなければcomplete_registrationページにリダイレクトしますが、ユーザーがホームページに行ったり、ログアウトしたり、何か他の人にアクセスしたりする場合は、ユーザーが制限した一部のページにアクセスしようとした場合にのみリダイレクトします。
また、必要な情報をすべて入力するまで作成しないでください。
@elnurあなたは何を編集しましたか? – alex88
最後に編集したタイムスタンプをクリックし、自分自身で確認してください。 –
今日はどんな失礼な答え、悪い気分? – alex88