मैं OWuth के साथ उपयोगकर्ता लॉगिन करने के लिए 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;
}
समस्या यह है कि उदाहरण के लिए ट्विटर ईमेल नहीं देता है या मैं कुछ नए फ़ील्ड बनने से पहले कुछ अतिरिक्त फ़ील्ड शामिल करना चाहता हूं। क्या उपयोगकर्ता को इसे बनाने से पहले "पूर्ण पंजीकरण" फ़ॉर्म पर रीडायरेक्ट करने का कोई तरीका है?
मैंने एक अनुरोध श्रोता जोड़ने की कोशिश की है, कि प्रत्येक अनुरोध पर, यदि उपयोगकर्ता लॉग है, तो जांचता है कि ईमेल वहां है और यदि यह पूर्ण_ पंजीकरण पृष्ठ पर रीडायरेक्ट नहीं करता है, लेकिन यह भी रीडायरेक्ट करेगा उपयोगकर्ता होमपेज पर जाता है, लॉगआउट या कुछ और करने के लिए, मैं उसे केवल तभी रीडायरेक्ट करना चाहता हूं यदि वह कुछ उपयोगकर्ता प्रतिबंधित पृष्ठों तक पहुंचने का प्रयास करता है।
या बेहतर, इसे तब तक न बनाएं जब तक कि वह सभी आवश्यक सूचनाएं न दे।
@ एलनूर आपने क्या संपादित किया? सिर्फ यह जानने के लिए कि क्या कुछ गलत था – alex88
अंतिम संपादन टाइमस्टैम्प पर क्लिक करें और अपने लिए देखें। –
आज क्या अशिष्ट जवाब है, बुरा मूड आज? – alex88