0

我正在尝试通过 facebook 登录用户。我也使用了 django-social-auth。我已经成功地将它与我的测试项目集成。但是,我对如何将用户映射到 django auth 用户一无所知。更准确地说,例如,我通过 facebook 对用户进行身份验证。会话结束后,用户注销。当用户第二次返回时,再次通过 facebook,我怎么知道它是同一个用户?我不能使用 facebook 用户名,因为用户名可以更改!由于显而易见的原因,我无法使用用户的电子邮件 ID。facebook 发送的数据中的什么标识符,我应该认为对于特定用户是唯一的吗?facebook发送的响应中的键如下

['username', 'bio', 'first_name', 'last_name', 'verified', 'name', 'locale', 'hometown', 'work', 'expires', 'sports', 'languages', 'quotes', 'link', 'location', 'gender', 'access_token', 'timezone', 'education', 'updated_time', 'id']

不过,对我来说最明显的答案是使用“id”来识别用户,facebook 将所有数据移动到新服务器的可能性有多大,与用户相关的“id”字段发生变化的可能性有多大?如果发生这种情况,如果用户的 id 与后者的前一个 id 相同,则可能会导致具有更改 id 的用户访问另一个用户的数据!我可能可以使用 'id' 和 'username' 的组合,因为 facebook 只允许您更改用户名一次。但如果他们取消这个限制,就会打破我的逻辑。我对 OAuth2 完全陌生,所以如果这听起来很愚蠢,请原谅我的无知。我试图研究一下,但在庞大的教程中迷失了方向!人们通常如何处理这个问题?

编辑:链接为重复的问题的答案没有回答我关于如何处理在 facebook 端更改 ID 的问题。虽然很少见,但也不能排除这种可能性,特别是因为变化会发生在 facebook 端,我无法控制。而且,当它改变时,我什至不会有任何暗示。如果发生这种情况,我的应用程序用户的安全将受到威胁!由于 OAuth2 是一种标准,是否有关于唯一标识符的指南?是否有任何准则阻止提供者更改用户 ID?

4

1 回答 1

0

Django socialauth 插件可以做到这一切。如果我没记错的话(从 3 年前的一个项目中使用它),那么 socialauth 有自己的模型,用于将用户与 facebook 等其他环境中的帐户联系起来。

当我这样做时,我使用他们的电子邮件地址作为这个唯一键,用于将我的应用程序中的用户与 facebook 或 gmail 中的用户联系起来。

看看这个文件: https ://github.com/omab/django-social-auth/blob/master/social_auth/db/django_models.py

保存这些参考的模型在那里。

艾伦

于 2013-06-24T16:44:08.987 回答