django allauth facebook перенаправляет на регистрацию, когда полученная электронная почта соответствует электронной почте существующего пользователя?
Я успешно могу войти через Google и Facebook, используя Django (1.6.4) и allauth (0.16.1) и Python (2.7) с ожидаемым перенаправлением в settings.LOGIN_REDIRECT_URL в случае, когда нет существующего пользователя с emailid, полученным из поставщик. Однако, когда уже существует пользователь с тем же адресом электронной почты, что и у провайдера (fb или goolge), он всегда перенаправляется в / account / social / signup / #= страница регистрации с просьбой:
Вы собираетесь использовать свою учетную запись Facebook / Google для входа на example.com. В качестве последнего шага, пожалуйста, заполните следующую форму: Электронная почта заполняется автоматически.
Я проверил сSOCIALACCOUNT_AUTO_SIGNUP = True
или жеFalse
, но без эффекта. Я попытался изменить auth_type для Facebook, но я не вижу других вариантов, кроме "rerequest"
У меня есть следующие settings.py:
ACCOUNT_AUTHENTICATION_METHOD = "email" # Defaults to username_email
ACCOUNT_USERNAME_REQUIRED = False # Defaults to True
ACCOUNT_EMAIL_REQUIRED = True # Defaults to False
SOCIALACCOUNT_QUERY_EMAIL = ACCOUNT_EMAIL_REQUIRED
SOCIALACCOUNT_AUTO_SIGNUP = True
SOCIALACCOUNT_EMAIL_REQUIRED = False
ACCOUNT_ADAPTER = "myproject.adapter.MyLoginAccountAdapter"
LOGIN_URL = "/"
LOGIN_REDIRECT_URL = "/users/{id}/mytags"
Как я могу остановить это перенаправление на регистрацию и сделать так, чтобы логин провайдера перенаправлялся на LOGIN_REDIRECT_URL, в частности, уже существующего пользователя с тем же emailid?
ПРИМЕЧАНИЕ: это я пробовал
Я уже обновил get_login_redirect_url в myproject.adapter.MyLoginAccountAdapter. Работает только для Google, но не для Facebook, как утверждаютДжанго Аллах - установить перенаправление FacebookЯ пытался "Обойти форму регистрации с помощью Аллаута"но не работаетОБНОВЛЕНИЕ:
Благодаря этомуответЯ понял, что вход в систему через Facebook будет перенаправлен на страницу регистрации в случае, когда электронное письмо, полученное из профиля Facebook, соответствует уже существующему адресу электронной почты пользователя.Я обновил вопрос, чтобы учесть вышеупомянутый случай.Чтобы подвести итог проблемы, это тот случай, когда несколько учетных записей провайдеров имеют одинаковый идентификатор электронной почты, и django-allauth не позволяет взаимозаменяемо входить в систему (например, если я зарегистрировался один раз с использованием facebook, django-allauth потребует, чтобы я использовал только facebook, а не Google или любой другой провайдер с таким же идентификатором электронной почты)Я решил это с помощью@receiver(pre_social_login)
а такжеraise ImmediateHttpResponse
(посмотрите на мой ответ) с полезными ссылками:этот а такжеэтотСпасибо амит