我知道这个主题已经有一些问题了,但是我尝试实现那些解决方案并不能真正解决我的问题。
我在这里谈论的是使用allauth进行社交注册,尤其是Facebook。
期望的行为:在Facebook注册后,我希望用户进入我的URL“accounts:welcome”,但是当他们简单登录时,我希望他们进入我的LOGIN_REDIRECT_URL(即站点的主页)。 在这里和那里看过之后,这是我想出的代码(编写我的自定义适配器)
settings.py:
LOGIN_REDIRECT_URL = ("gamestream:home")
SOCIALACCOUNT_ADAPTER = "myproject.users.adapter.MySocialAccountAdapter"
adapter.py:
from django.conf import settings
from allauth.socialaccount.adapter import DefaultSocialAccountAdapter
from django.core.urlresolvers import reverse
from django.shortcuts import redirect
class MySocialAccountAdapter(DefaultSocialAccountAdapter):
def save_user(self, request, sociallogin, form=None):
print('OK11OK')
super().save_user(request, sociallogin, form=form)
return redirect(reverse('accounts:welcome'))
def get_connect_redirect_url(self, request, socialaccount):
print('OK22OK')
assert is_authenticated(request.user)
url = reverse('accounts:welcome')
return url
请假设所有链接/设置都是正确的,例如当我通过 Facebook 应用程序创建自己的用户时,控制台会打印出“OK11OK”。事实是,由于控制台上从未读取到“OK22OK”,因此方法 get_connect_redirect_url 从未被触发。用户已创建并且我最终进入主页,这不是我想要的。
因此,我认为在 save_user 方法之后调用了其他内容,因为我可以看出我经过了 accounts:welcome,但最终进入了主页。我可以确定这一点,因为如果我在 save_user 方法中返回一个不正确的 URL,我会收到特定于该行的 URL 的错误。
那么,问题出在哪里呢? 我认为我可能覆盖了错误的方法,但我已经阅读了基本 SocialAccountAdapter 的所有代码,并没有找到其他合适的选择。
只是想提一下,由于我对普通帐户注册(非社交)有更多的控制,因此我已经实现了我想要的功能。 有什么建议吗?
非常感谢!