Django OAuth工具包和POSTMAN

时间:2017-02-23 14:47:28

标签: django django-rest-framework django-rest-auth django-oauth

我使用Django OAuth Toolkit创建了一个django OAuth服务器。

我设置正确的代码,当我按以下方式使用CURL时:

curl -X POST -d "grant_type=password&username=geethpw&password=abcabcabc" -u"wHsGgpsHZyw8ghnWbEPZC8f4AZLgJIPmoo50oNWp:ZQcXeQWnae0gmX0SMi6Xn6puBnhiphR2M80UC6ugmffbrUd66awhbguYgxtQ1ufahJZehj4RlGjYu06fHkVgO15TURttSozj27nshl0AhFfCVzUKqTDubBimTSsK4yDS" http://localhost:8000/o/token/

我收到回复:

{"access_token": "glzwHLQNvUNQSOU5kFAoopgJxiNHcW", "token_type": "Bearer", "expires_in": 36000, "refresh_token": "5k6jvCd2UxaRUGHKONC2SqDukitG5Y", "scope": "read write groups"}Geeths-MacBook-Pro:~ geethwijewickrama$ 
Geeths-MacBook-Pro:~ geethwijewickrama$ 

这是预期的。

但是当我尝试邮递员做同样的事情时,我总是得到:

{
  "error": "unsupported_grant_type"
}

我的标题是:

Content-Type:application/x-www-form-urlencoded

如果我删除此标题,我会得到:

{
  "error": "invalid_client"
}

如何在邮递员中测试我的API?

2 个答案:

答案 0 :(得分:1)

你的邮递员身体应该是这样的:

grant_type: <grant_type>
client_id: <client_id>
client_secret: <client_secret>
username: <username>
password: <password>

尝试使用这些Bulkedit,希望这有帮助(希望您已注册应用程序以获取client_id和client_secret)

答案 1 :(得分:0)

从JS的django-oauth-toolkit获取令牌:

async function getToken () {
    let res = await fetch("https://<your_domain>/o/token/", {
        body: new URLSearchParams({
            grant_type: 'password',
            username: '<user_name>',
            password: '<user_pass>',
            client_id: '<client_app_id>',
            client_secret: '<client_pass>'
        }),
        headers: {
            "Content-Type": "application/x-www-form-urlencoded"
        },
        method: "POST"
    })
    return res.json();
}
console.log(await getToken());

您的客户应用程序授权授予类型应为:“基于资源所有者的密码” oauth client application: Auth grant type

P.S。我无法通过“ Content-Type”:“ application / json” 来获取令牌,不确定为什么(django-oauth-toolkit文档对此一无所知)。