Попытка связать учетные записи социальных сетей с одним пользователем (проблема наследования от DefaultSocialAccountAdapter)

Я выполнил основные документы по установке allauth, поэтому у меня есть базовая система Google, Facebook и система имени пользователя/пароля, работающая нормально. Что я хотел бы сделать сейчас, так это автоматически связать социальные учетные записи с существующей учетной записью имени пользователя и пароля, когда пользователь пытается войти в систему с помощью ссылки на социальную учетную запись.

На эту тему уже есть много сообщений, таких как это и это, но я довольно рано застрял в процесс.

Согласно этим другим сообщениям, я создал класс, который переопределяет DefaultSocialAccountAdapter, и назвал его SocialAccountAdapter. Затем я добавил его в качестве параметра конфигурации в файл settings.py (где my_app — это имя моего приложения внутри INSTALLED_APPS):

ACCOUNT_ADAPTER = 'my_app.adapter.SocialAccountAdapter'

Рассматриваемый класс выглядит следующим образом.

from allauth.socialaccount.adapter import DefaultSocialAccountAdapter

class SocialAccountAdapter(DefaultSocialAccountAdapter):
  def pre_social_login(self, request, sociallogin):
    pass

... другими словами, он не должен делать ничего, кроме родительского класса. Проблема в том, что я получаю ошибки на странице /accounts/login/.

Файл ".../site-packages/allauth/account/utils.py", строка 41, в get_next_redirect_url, если не get_adapter(request).is_safe_url(redirect_to): AttributeError: объект "SocialAccountAdapter" не имеет атрибута "is_safe_url"

Итак, чтобы «исправить» это, я добавил в класс SocialAccountAdapter следующее:

def is_safe_url(self, url):
  from django.utils.http import is_safe_url
  return is_safe_url(url)

... но при использовании формы по умолчанию для ввода имени пользователя и пароля на странице учетных записей / входа в систему я получаю следующую ошибку.

Файл ".../site-packages/allauth/account/forms.py", строка 157, в чистом user = get_adapter(self.request).authenticate( AttributeError: объект SocialAccountAdapter не имеет атрибута "authenticate"

Если я попытаюсь перейти по одной из ссылок для входа в социальную сеть, например:

{% provider_login_url provider.id openid=brand.openid_url process=process %}) 

... Я получаю следующую ошибку.

Файл ".../site-packages/allauth/socialaccount/adapter.py", строка 68, в new_user return get_account_adapter().new_user(request) TypeError: new_user() принимает ровно 3 аргумента (2 задано)

Есть ли какая-то базовая процедура настройки, которую я пропустил? Согласно документам, это должно быть простое переопределение, но что-то еще происходит за кулисами, чего я не понимаю, и вынуждает меня добавлять код, который я не ожидал учитывать.


person gmcc051    schedule 16.11.2017    source источник


Ответы (1)


Вы должны изменить ACCOUNT_ADAPTER на SOCIALACCOUNT_ADAPTER.

SOCIALACCOUNT_ADAPTER =”allauth.socialaccount.adapter.DefaultSocialAccountAdapter”

Указывает используемый класс адаптера, что позволяет изменить определенное поведение по умолчанию.

Документация взята из здесь.

person Yenchen    schedule 13.08.2018