【问题标题】:social-auth-app-django: how to disconnect a user without passwordsocial-auth-app-django:如何在没有密码的情况下断开用户的连接
【发布时间】:2022-06-20 20:26:36
【问题描述】:

在我的网站 (www.raptors.ru) 上,我正在使用 social-auth-app-django 来授权来自 Facebook 的用户。为了让他们更容易登录,我做了以下设置:

ACCOUNT_PASSWORD_INPUT_RENDER_VALUE = True

这样用户就不需要输入密码了。 FB 用户第一次登录时,会在表users 中创建一条记录。重要的是,该用户在我的网站上没有密码。但是,该用户功能齐全:他能够发布帖子、制作 cmets 等。如果用户想要断开与他的社交帐户的连接,问题就开始了。 首先,如果有人试图通过 LoginCancelledView 断开他的帐户(直接链接是https://raptors.ru/accounts/social/login/cancelled/,他会收到一条消息说他已成功断开连接,但这不是事实,因为他的用户名仍在页面标题上(见屏幕截图)。

断开连接的第二种方法是从连接页面 (https://raptors.ru/accounts/social/connections/)。

但是,如果用户点击 Remove 按钮,Django 不会这样做并报告以下错误:您的帐户没有设置密码。

请告诉我,从我的网站断开(或完全删除)Facebook 用户的正确且有效的方法是什么? FB 坚持我应该提供这个选项。

【问题讨论】:

    标签: django facebook disconnect social-auth-app-django


    【解决方案1】:

    Allauth 提供了一个设置现有用户密码的视图,可用于为以前只有社交登录的用户添加密码。来自the documentation

    经过身份验证的用户可以使用allauth.account.views.PasswordSetViewallauth.account.views.PasswordChangeView 视图管理他们的密码帐户,分别位于/accounts/password/set/ /accounts/password/change/(URL 名称分别为account_set_passwordaccount_change_password) .

    根据用户是否设置密码 (user.has_usable_password()),在这些视图之间重定向用户。通常,当用户通过社交服务提供商注册时,他们不会设置密码。

    因此,您可以先让用户设置密码(通过转到 /accounts/password/set/),然后断开社交帐户。

    【讨论】:

      猜你喜欢
      • 2015-10-25
      • 2019-10-23
      • 2015-06-02
      • 1970-01-01
      • 2013-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多