Я успешно могу войти в систему через Google и Facebook, используя Django (1.6.4) и allauth (0.16.1) и Python (2.7) с ожидаемым перенаправлением на settings.LOGIN_REDIRECT_URL в случае, если нет существующего пользователя с адрес электронной почты, полученный от поставщика. Однако, когда уже существует пользователь с тем же адресом электронной почты, что и тот, который был получен от провайдера (fb или goolge), он всегда перенаправляет на страницу /accounts/social/signup/ # = 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 в конкретном случае уже существующего пользователя с тем же адресом электронной почты?
ПРИМЕЧАНИЕ. Это я пробовал
- Я уже обновил get_login_redirect_url в myproject.adapter.MyLoginAccountAdapter. Работает только для google, но не для facebook, как заявлено Django allauth - установить перенаправление facebook
- Я пробовал "Включить регистрационную форму с помощью allauth", но не работает.
ОБНОВЛЕНИЕ:
- Благодаря этому answer, я понял, что логин через facebook будет перенаправлен на страницу регистрации в случае: когда электронная почта, полученная из facebook профили совпадает с уже существующим пользователем электронной почты.
- Я обновил вопрос, чтобы учесть вышеупомянутый случай.
- Чтобы суммировать проблему, это случай, когда несколько учетных записей провайдеров имеют одинаковый идентификатор электронной почты, а django-allauth не разрешает взаимозаменяемый логин (ei, если я зарегистрировал один раз с помощью facebook, django-allauth потребует от меня использовать только facebook и не Google или ничего другого провайдера с тем же адресом электронной почты)
- Я решил это, используя
@receiver(pre_social_login)
иraise ImmediateHttpResponse
(посмотрите на мой ответ) с полезными ссылками: this и thisone
Спасибо, Amit