结合Django和社交帐户的社交Oauth2其余框架的实现

时间:2018-08-07 11:55:43

标签: django rest oauth-2.0 django-rest-framework social

我目前正在研究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和后端。我想根据良好做法来做。我发现这些登录方法很多。

1 个答案:

答案 0 :(得分:0)

这是Oauth的常见问题。您最终在数据库中有多个条目。如果要解决此问题,则在创建重复项时必须检测到潜在的重复项(这样就永远不会有重复项),并让用户说他们拥有第一个帐户。

以后修复重复项很麻烦,可能需要通知许多用户您认为可能有重复项并提示他们合并。