尝试将社交帐户与单个用户链接(从DefaultSocialAccountAdapter继承的问题)

时间:2017-11-16 10:08:27

标签: django social allauth

我已经完成了基本的allauth安装文档,所以我有一个基本的Google,Facebook和用户名/密码系统正常工作。我现在要做的是当用户尝试使用社交帐户链接登录时自动将社交帐户与现有用户名+密码帐户相关联。

有很多关于这个主题的帖子,例如thisthis,但我在这个过程中很早就陷入了困境。

根据其他帖子,我创建了一个覆盖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 / page上遇到错误。

  

文件“... / site-packages / allauth / account / utils.py”,第41行,in   get_next_redirect_url       如果不是get_adapter(请求).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行,in   新用户       return get_account_adapter()。new_user(request)TypeError:new_user()只取3个参数(给定2个)

我错过了一些基本的设置程序吗?根据文档,这应该只是一个简单的覆盖,但在我不理解的幕后发生了其他事情,并迫使我添加我不希望考虑的代码。

1 个答案:

答案 0 :(得分:0)

您应将ACCOUNT_ADAPTER更改为SOCIALACCOUNT_ADAPTER

SOCIALACCOUNT_ADAPTER =”allauth.socialaccount.adapter.DefaultSocialAccountAdapter”

指定要使用的适配器类,从而允许您更改某些默认行为。

文档来自here