voi*_*sin 14 django django-allauth
在测试django-allauth时,如果我使用不同的社交帐户登录并注销,它们似乎没有链接在一起(因为我无法通过查看socialaccount_set.all.0,socialaccount_set.all.1等来访问它们) ).
有人可以解释如何将社交帐户链接在一起吗?
我确实看到了这篇文章:如何使用django-allauth将多个社交身份验证提供程序连接到同一个django用户?这似乎使用户有责任首先使用一个社交帐户登录,然后为自己链接其他帐户.
当然应该有一种方法可以做到这一点,而不是将责任推给用户?也许通过电子邮件地址
有没有办法在现有用户之后执行此操作?
nev*_*ves 19
如果您的用户已经登录,我已使用标签provider_login_url成功连接了另一个帐户并设置了该属性process="connect".以下是为经过身份验证的用户显示的块中的代码段:
{% load socialaccount %}
<p><a href="{% provider_login_url "facebook" process="connect" %}">Connect a facebook account</a></p>
<p><a href="{% provider_login_url "google" process="connect" %}">Connect a Google account</a></p>
Run Code Online (Sandbox Code Playgroud)
设置SOCIALACCOUNT_QUERY_EMAIL=True并且不要忘记询问提供商范围内的电子邮件:
SOCIALACCOUNT_PROVIDERS = \
{'facebook':
{'SCOPE': ['email', ],
'AUTH_PARAMS': {'auth_type': 'reauthenticate'},
'METHOD': 'oauth2',
'LOCALE_FUNC': lambda request: 'pt_BR'},
'google':
{'SCOPE': ['https://www.googleapis.com/auth/userinfo.profile',
'email'],
'AUTH_PARAMS': {'access_type': 'online'}
},
}
Run Code Online (Sandbox Code Playgroud)
我还想知道是否可以使用电子邮件地址自动关联帐户.我可以在Google和Facebook发送的socialaccount_socialaccount表的"extra_data"列中看到 "verified_email": true.对我来说,自动关联登录和强大的可用性增强就足够了.
Ted*_*Ted 13
当然应该有一种方法可以做到这一点,而不是将责任推给用户?也许通过电子邮件地址
要非常小心你如何做到这一点.你可能正在打开一个巨大的安全漏洞.如果您没有对用户施加任何责任,只是使用相同的电子邮件地址自动链接帐户,则会引入以下攻击媒介:
您可以采取措施降低此风险,但即使所有提供商现在都需要确认电子邮件,第三方团队中的任何故障都会在您的安全性中打开这个漏洞.
也许你正在做的事情风险是值得的,请注意.对用户的一点责任可能不是最糟糕的事情.
我已经看到了建议自动匹配的流量,然后询问您的密码或重新通过其中一个原始提供商进行身份验证,以将新帐户添加到您的原始帐户.这些可能没有相同的潜力可利用,但有一些脑 - f*级角落案例和UI并发症.