我目前正在为web应用程序开发登录机制。这是前端(Vue(+Django DRF后端的分离。我想使用Djano-rest-framework-social-OAuth2库来实现我们可以在Evernote应用程序中看到的相同内容。用户可以选择从头开始创建帐户或通过谷歌登录。好的,如果我在Evernote网站上创建一个帐户,我可以立即将它们连接到谷歌帐户,这真是太好了。
在这种情况下,如果我想从一开始就基于REST进行这种通信,那么Vue-Django方面的通信会是什么样子呢
我的计划如下用户通过填写注册表格建立帐户
通过这种方式,我在Django用户表中获得了登录名、密码等
登录该帐户后,他会看到自己的网站和连接选项来自Facebook。选择此选项并发送查询后
卷曲-X POST-d";grant_type=convert_token&client_id=<client_id>amp;client_secret=<client_secret>amp;后端=&令牌=<backend_token>quot;http://localhost:8000/auth/convert-代币
答覆:
{
"access_token": "c3JQjkkAOx8d0ZSyEgP6Hyh2hX3R66",
"expires_in": 36000,
"token_type": "Bearer",
"scope": "read write",
"refresh_token": "7qawsbmQHgOv5vYjzorAXOeA0d2vla"
}
当然,在此之前,您可以使用JavaScriptSDK从Facebook获得访问令牌。现在我遇到了一个问题。在这样的交易之后,数据库中会出现一个2帐户。。。。
当涉及到通过UserDjango模型中的帐户授权用户时,我使用查询
卷曲-X POST-d";client_id=<client_id>amp;client_secret=<client_secret>amp;grant_type=密码&username=<user_name>amp;密码=";http://localhost:8000/auth/token
我得到的回应是:
{
"access_token": "hu7chDBxOl11eVkZJmWCXPs0DgkdcS",
"expires_in": 36000,
"token_type": "Bearer",
"scope": "read write",
"refresh_token": "m6K7tBQbTLJMXNFQQqmDj2wKGUWjIV"
}
问题是,就用户帐户而言,我在数据库中有两个单独的条目,我真的不知道如何将它们组合在一起。
一个使用数据库中的条目创建,另一个使用curl查询创建,我在其中指示access_token和后端。我想按照良好的做法去做。我发现这些登录方法很多。
这是Oauth的常见问题。您的数据库中确实有多个条目。如果你想解决这个问题,你必须在准备创建重复时检测潜在的重复(这样你就永远不会有重复(,并给用户一个机会说他们拥有第一个帐户。
之后修复重复项很麻烦,可能需要通知许多用户您认为可能存在重复并提示他们合并。