我目前正在研究Web应用程序的登录机制。这是前端(Vue)+ Django DRF后端的分离。我想使用django-rest-framework-social-oauth2库来实现一些相同的东西,例如在Evernote应用程序中可以看到的。用户可以选择从头开始创建帐户,也可以选择通过Google登录。好的,如果我在Evernote网站上创建一个帐户,那可以立即将它们连接到Google帐户,真是太好了。
在这种情况下,如果我想基于REST从一开始就在Vue-Django方面进行这种交流
我的计划如下 用户通过填写注册表来建立帐户
通过这种方式,我在django User表中获得了登录名,密码等
登录该帐户后,他会看到他的网站和连接选项 来自Facebook。选择此选项并发送查询后
curl -X POST -d“ grant_type = convert_token&client_id =&client_secret =&backend =&token =” http://localhost:8000/auth/convert-token
回复:
{
"access_token": "c3JQjkkAOx8d0ZSyEgP6Hyh2hX3R66",
"expires_in": 36000,
"token_type": "Bearer",
"scope": "read write",
"refresh_token": "7qawsbmQHgOv5vYjzorAXOeA0d2vla"
}
当然,在此之前,您可以使用JS SDK从Facebook获取访问令牌。 现在我有一个问题..这样的交易之后,数据库中出现了一个2帐户....
在通过用户Django模型中的帐户授权用户时,我会通过查询来实现
curl -X POST -d“ client_id =&client_secret =&grant_type = password&username =&pass =” =“ http://localhost:8000/auth/token
一切正常,我得到回应:
{
"access_token": "hu7chDBxOl11eVkZJmWCXPs0DgkdcS",
"expires_in": 36000,
"token_type": "Bearer",
"scope": "read write",
"refresh_token": "m6K7tBQbTLJMXNFQQqmDj2wKGUWjIV"
}
问题在于,就用户帐户而言,我在数据库中有2个单独的条目,我真的不知道如何将它们组合在一起。
第一个使用数据库中的条目创建,第二个使用curl查询创建帐户,在其中我指示access_token和后端。我想根据良好做法来做。我发现这些登录方法很多。
答案 0 :(得分:0)
这是Oauth的常见问题。您最终在数据库中有多个条目。如果要解决此问题,则在创建重复项时必须检测到潜在的重复项(这样就永远不会有重复项),并让用户说他们拥有第一个帐户。
以后修复重复项很麻烦,可能需要通知许多用户您认为可能有重复项并提示他们合并。