gpt4 book ai didi

Facebook 社交注册后 Django Allauth 非常具体的重定向

转载 作者:行者123 更新时间:2023-12-05 07:35:01 27 4
gpt4 key购买 nike

我知道已经有一些关于该主题的问题,但我已尝试实现这些解决方案,但无法真正解决我的问题。

我在这里谈论的是 allauth 的社交注册,尤其是 facebook。

期望的行为:在 facebook 注册后,我希望用户转到我的 url“accounts:welcome”,但是当他们只是登录时,我希望他们转到我的 LOGIN_REDIRECT_URL(这是网站的主页)。在这里和那里查看之后,这是我想出的代码(编写我的自定义适配器)

设置.py:

LOGIN_REDIRECT_URL = ("gamestream:home")
SOCIALACCOUNT_ADAPTER = "myproject.users.adapter.MySocialAccountAdapter"

适配器.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”。事实上,方法 get_connect_redirect_url 永远不会被触发,因为我从未在控制台上读取过“OK22OK”。用户已创建,我最终进入主页,这不是我想要的。

所以我认为在 save_user 方法之后会调用其他东西,因为我可以告诉我我通过了 accounts:welcome,但最终出现在主页上。我可以这样说,因为如果我在 save_user 方法中返回不正确的 url,我会在该行收到特定于该 url 的错误。

那么,这里出了什么问题?我想我可能覆盖了错误的方法,但我已经阅读了基础 SocialAccountAdapter 的所有代码,但我看不到任何其他正确的选择。

只是想提一下,因为我对普通帐户注册(非社交帐户)有更多控制权,所以我已经实现了我想要的。有什么想法吗?

非常感谢!

最佳答案

我也遇到了同样的问题,我找到了两种方法:

方法一

Django 不使用 DefaultSocialAccountAdapter 的重定向功能,您必须重写 DefaultAccountAdapter 的 get_signup_redirect_url 函数才能达到此结果。

首先你需要改变settings.py中的默认适配器:

ACCOUNT_ADAPTER = 'users.adapter.MyAccountAdapter'

然后,只需用您的网址覆盖 get_signup_redirect_url 即可:

# project/users/adapter.py
from allauth.account.adapter import DefaultAccountAdapter

class MyAccountAdapter(DefaultAccountAdapter):

def get_signup_redirect_url(self, request):
return resolve_url('/your/url/')

方法二

这个比较简单

如果您查看 DefaultAccountAdapter 的源代码,它会说:

Returns the default URL to redirect to after logging in. Notethat URLs passed explicitly (e.g. by passing along a nextGET parameter) take precedence over the value returned here.

因此,您可以在登录模板中传递下一个参数来强制重定向。以下是使用 Google 社交登录的示例:

{% load socialaccount %}
{% providers_media_js %}
{# your html tags #}
<body>
<a href="{% provider_login_url "google" next=/success/url/ %}">SOCIAL LOGIN </a>
</body>

当然,您可以根据需要个性化下一个 url(我指的是/success/url/)。您可以传递一个包含您想要的 url 的上下文变量,并将其放置在那里,而不是那个硬编码的 url。

关于Facebook 社交注册后 Django Allauth 非常具体的重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49800453/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com