如何处理前端已注册的社交用户(django-rest-auth)?

时间:2018-02-07 02:40:12

标签: django django-rest-framework django-rest-auth

我一直在使用django-rest-auth,它非常适合电子邮件注册流程。我一直在尝试实现社交登录(通过FB),在最新版本(v.0.9.3)中,似乎有人已经通过电子邮件创建了一个帐户,如果该用户尝试登录,他们只会引发错误通过社交。此评论在提交中:

# We have an account already signed up in a different flow
+            # with the same email address: raise an exception.
+            # This needs to be handled in the frontend. We can not just
+            # link up the accounts due to security constraints

一些问题(在github问题中也发布了这个问题):为什么这是一个安全问题?您信任OAuth提供商(在这种情况下为FB)的社交认证的重点吗?第二,如何在前端处理这个问题?人们通常首先注册电子邮件(通常只是因为网站或应用程序在开发周期的后期添加了社交登录)。在我看来,这让我留下的唯一选择是告诉用户“抱歉,您只能使用您的电子邮件帐户登录”。或者只是选择FB登录或电子邮件(或Twitter或其他),但只能选择其中一个。我在这里错过了什么吗?这对我来说似乎非常有限。

1 个答案:

答案 0 :(得分:1)

安全问题来自以下事实:无法验证社交帐户是否与之前注册的用户完全相同。

要将社交帐户附加到django-rest-auth中的现有用户,您需要使用社交连接视图。以下是文档中的示例:http://django-rest-auth.readthedocs.io/en/latest/installation.html#additional-social-connect-views

社交连接视图类似于常规社交登录,除了,您必须已经作为普通用户进行身份验证,因此应用程序会知道它是您,然后才能附加社交帐户。

所以示例流程如下:

  1. 以现有用户身份登录(之前作为非社交帐户注册)

  2. 访问/rest-auth/facebook/connect/以将Facebook社交帐户附加到此现有用户。