使用 axios 获取访问令牌
Getting access token with axios
我正在使用 Lyft API,并试图弄清楚如何使用带有节点脚本的 axios 获取访问令牌。
我可以使用 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 请求缺少什么?如有任何帮助,我们将不胜感激!
根据 Lyft (https://developer.lyft.com/docs/authentication) 的文档,您需要使用 HTTP Basic 身份验证。
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,因为如果您将它们用于重要项目或类似的事情,它们不是 public 的东西。
最佳解决方案是 source 使用以下方式。客户端向授权服务器
发送一个带有以下正文参数的POST请求
- grant_type 值为 client_credentials
- client_id 客户ID
- client_secret 与客户的秘密
scope 具有 space 分隔的请求范围权限列表。
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)
})
我已经用这段代码解决了我的问题。
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);
})
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);
});
以下作品。我通过阅读以上评论得到它。诀窍是数据字段。明确使用 - 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>"
}
});
我正在使用 Lyft API,并试图弄清楚如何使用带有节点脚本的 axios 获取访问令牌。
我可以使用 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 请求缺少什么?如有任何帮助,我们将不胜感激!
根据 Lyft (https://developer.lyft.com/docs/authentication) 的文档,您需要使用 HTTP Basic 身份验证。
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,因为如果您将它们用于重要项目或类似的事情,它们不是 public 的东西。
最佳解决方案是 source 使用以下方式。客户端向授权服务器
发送一个带有以下正文参数的POST请求- grant_type 值为 client_credentials
- client_id 客户ID
- client_secret 与客户的秘密
scope 具有 space 分隔的请求范围权限列表。
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) })
我已经用这段代码解决了我的问题。
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);
})
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);
});
以下作品。我通过阅读以上评论得到它。诀窍是数据字段。明确使用 - 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>"
}
});