6

我正在使用Lyft API,并试图弄清楚如何使用带有节点脚本的 axios 获取访问令牌。

我可以通过填写如下表格使用 Postman 手动获取访问令牌:

在 Postman 中获取令牌

当我填写表格时,我可以成功地从 Lyft 获得一个新的令牌。

我正在尝试通过执行以下操作将其转换为使用 axios 的 POST 请求:

var axios = require('axios');
var data = {
"grant_type": "client_credentials",
"scope": "public",
"client_id": "XXXXXXXXX",
"client_secret": "XXXXXXXX"
};
var url = "https://api.lyft.com/oauth/token";
  return axios.post(url, data)
    .then(function(response){
        console.log(response.data)
    })
    .catch(function (error) {
      console.log(error);
    });

当我运行脚本时,我收到此错误:

{ error_description: 'Unauthorized', error: 'invalid_client' }

我的 axios 请求中缺少什么?任何帮助,将不胜感激!

4

5 回答 5

7

根据 Lyft 的文档(https://developer.lyft.com/docs/authentication),您需要使用 HTTP Basic auth。

var axios = require("axios");

axios.request({
  url: "/oauth/token",
  method: "post",
  baseURL: "https://api.lyft.com/",
  auth: {
    username: "vaf7vX0LpsL5",
    password: "pVEosNa5TuK2x7UBG_ZlONonDsgJc3L1"
  },
  data: {
    "grant_type": "client_credentials",
    "scope": "public"    
  }
}).then(function(res) {
  console.log(res);  
});

快乐编码:)

!重要的事情!
我强烈建议您尽快更改您的 secret_id 和 client_secret,因为如果您将它们用于重要项目或类似的事情,它们不是公开的东西。

于 2017-01-18T12:50:28.943 回答
5

我已经用这段代码解决了我的问题。

var reqData = "grant_type=password&username=test&password=asd";
         Axios({
    method: 'post',
    url: 'http://localhost:60439/token',
        data: (reqData),   

    headers: { 
      "Content-Type": "application/x-www-form-urlencoded",
    }
  }).then((response) =>{
            console.log(response)
        }).catch((error) =>{
            console.log(error);
        })
于 2019-06-04T06:01:14.647 回答
0

最好的解决方案是 使用以下方式获取源。客户端向授权服务器发送带有以下正文参数的 POST 请求

  • grant_type 的值为 client_credentials
  • 带有客户 ID 的 client_id
  • client_secret 与客户的秘密
  • 具有以空格分隔的请求范围权限列表的范围。

        axios.post('https://exmaple.com/oauth/token',
        'grant_type=client_credentials&scope=all&client_id=1&client_secret=bb'
        )
        .then(function(res) {
           console.log(res);  
        })
        .catch(error => {
           console.log(error)
        })
    
于 2018-09-11T17:37:53.357 回答
0

const axios = require("axios");
const qs = require("qs");

const url = "URL";

const data = {
  grant_type: "client_credentials",
};

const auth = {
  username: "Client ID",
  password: "Client Secret",
};

const options = {
  method: "post",
  headers: {
    "Content-Type": "application/x-www-form-urlencoded",
  },
  data: qs.stringify(data),
  auth: auth,
  url,
};

  axios(options)
 .then((response) => {
      console.log(response.data.access_token);
  })
 .catch((err) => {
      console.log(err);
  });

于 2020-04-04T18:47:34.030 回答
0

以下作品。我通过阅读上面的评论得到了它。诀窍是数据字段。要明确使用 -data: "grant_type=client_credentials"

例子:

const axios = require("axios");
axios.request({ 
    headers:{'Content-Type': 'application/x-www-form-urlencoded'},
    url: "/oauth2/token",
    method: "post",
    baseURL: "https://<ServerFQDN>/", 
    data: "grant_type=client_credentials", 
    auth: {
        username: "<username>",
        password: "<password>"
    }
});
于 2021-09-29T16:20:39.287 回答