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

How to handle already registered social user in frontend (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)的社交身份验证的全部意义不在于此吗?其次,应该如何在前端处理这个问题?人们先注册电子邮件是很常见的事情(通常仅仅是因为网站或应用程序在开发周期的后期添加了社交登录)。在我看来,这留给我的唯一选择是告诉用户 "Sorry, you can only login with your email account." 或者简单地选择使用 FB 登录或电子邮件(或 Twitter 等),但只有其中之一。我在这里错过了什么吗?这对我来说似乎非常有限。

安全问题是因为无法验证社交账户是否与之前注册的用户完全相同。

为了将社交帐户附加到 django-rest-auth you need to use a social connect view. Here's example in docs: http://django-rest-auth.readthedocs.io/en/latest/installation.html#additional-social-connect-views 中的现有用户。

社交连接视图类似于常规社交登录,不同之处在于,您必须已经作为普通用户进行身份验证,这样应用才能知道是您,然后才能附加社交帐户。

因此示例流程如下:

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

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