如何维护通过社交身份验证进行身份验证的用户映射

时间:2013-06-24 15:02:30

标签: python django web-applications oauth-2.0 social

我正试图通过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?

1 个答案:

答案 0 :(得分:0)

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

当我这样做时,我使用他们的电子邮件地址作为这个唯一的密钥,用于将我的应用程序中的用户绑定到facebook或gmail中的用户。

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

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

艾伦