【问题标题】:Django perform actions after oauth callbackDjango 在 oauth 回调后执行操作
【发布时间】:2021-06-14 06:20:14
【问题描述】:

我有一个项目,我想让用户选择使用他们的 Google/Facebook 帐户来注册/登录。

此外,每当有新用户注册时,都会创建另一个模型(帐户)并与该用户建立联系。所有这些都很好,但现在我遇到了问题。

当使用 Continue with Google 的用户注册时,他们应该被重定向到我将使用刚刚创建的用户创建帐户的视图(可能不是最好的方法,但我找不到任何示例为了更好的)

现在这就是问题发生的地方:

如果用户表中已经存在电子邮件,则用户不会被转移到重定向 url,我将在其中执行检查,如果存在该电子邮件的帐户,我将在登录/注册页面上显示警告,而不是他们被重定向到allauth的...accounts/social/signup/ url

这就是我所拥有的:

settings.py

LOGIN_REDIRECT_URL = "/account_user/checkouath/"

views.py

def checkouath(request):
    user = request.user
    oauthUser = SocialAccount.objects.get(user=user)
    # Actions to create new Account and check if User exists are going to be here

    return redirect(reverse("homepage"))

这是我在 Google 上设置的重定向:http://127.0.0.1:8000/accounts/google/login/callback/

我在想我可以更改此 URL,但后来我收到了错误回调的错误。

现在我确定这是一个简单的问题,但我想不通,我想也许有一些回调处理程序,但我找不到资源来实现类似的东西。

【问题讨论】:

    标签: django django-models oauth django-allauth


    【解决方案1】:

    抱歉,我无法评论声望低于 50 的 bc,但我会在您回复后立即删除。有几件事情我必须提出来尝试提供帮助,

    • 您是否已在主 urls.py 中安装并包含 django-social(或您正在使用的任何 oauth 库)?
    • LOGIN_REDIRECT_URL 应该是您在用户登录后重定向用户的路由,因此通常是主路由或类似的东西。这是你的意图吗?
    • checkouauth 功能非常好,但您几乎可以在任何不需要路由的地方运行它。

    【讨论】:

    • 好的,所以我已经正确安装并添加了所有库,我发现如果用于登录的电子邮件帐户已经存在,那么用户将被重定向到自定义注册(我决定不使用它进行注册,而是模仿来自allauth的登录(我的登录带有额外消息)页面,所以我刚刚为它创建了一个新模板,其中包含一条消息,说明该电子邮件的自定义帐户已经存在并尝试登录。我'我很确定这不是最好的方法,但这对我有用,我已经对其进行了一些测试,效果很好。
    • 不错!我很高兴听到这个。我以前用我自己的几个应用程序都这样做过,非常方便
    • 是的,但我很确定这不是预期的方式哈哈
    • 它本身不是预期的方法,但这就是动态技术的美妙之处,哈哈——您可以对其进行扩展并自定义最重要的细节:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多