javascript - 使用 fetch 和 jwt 拨打电话的问题
问题描述
*我的目标是从自行车共享公司的 API 中获取自行车的位置。我使用 Postman 完成了第 1 步和第 2 步。但是一旦我掌握了它,我就会尝试将它集成到我的代码中。
第一步是验证您的电子邮件并生成身份验证令牌。这只需要一个可验证的电子邮件地址。使用正文 向https://web.spin.pm/api/v1/magic_links发出 POST 请求:
{"email": "sampleemail@gmail.com"}
从那里,您需要在电子邮件中找到令牌。此令牌需要通过 POST 请求发送到 https://web.spin.pm/api/v1/auth_tokens,正文如下:
{
"grant_type": "magic_link",
"magic_link": {
"email": "<email>",
"token": "<token>"
}
}
此请求返回如下所示的 JSON:{"jwt":"eyJ0eXAiOiJ.....cXVLw","refreshToken":"2cb07....bab5030","existingAccount":false}
- 要获取车辆的位置,请向https://web.spin.pm/api/v3/vehicles?lng=-77.0146489&lat=38.8969363&distance=&mode=用户标头授权:承载验证并使用 jwt -我们从 Auth 请求中获得的令牌。
你会得到类似这样的返回 JSON{"vehicles":[{"lat":37.69247,"lng":-122.46595,"last4":"3595","vehicle_type":"bicycle","batt_percentage":null,"rebalance":null}, … ]}
第 3 步是使用(async/awit 函数)在我遇到问题的地方使用 fetch 完成的。我将 jwt 复制粘贴到我的 .env 文件中并设置了正确的标题。拨打电话时收到 401 响应。当我使用邮递员测试第 3 步时,一切似乎都正常。我在这篇文章中附上了错误的截图。希望它更清楚,提前谢谢。
const fetch = require("node-fetch");
require('dotenv').config();
async function getBikes()
{
const lat = '38.897574612438575';
const lng = '-77.01855164084469';
const api_url = `https://web.spin.pm/api/v3/vehicles?lng=${lng}&lat=${lat}&distance=&mode=`;
const jwt_key = process.env.BERER_KEY;
try{
const config = { method: 'GET',
headers: {json: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': 'Bearer'+ jwt_key
} },
rejectUnauthorized: false
};
const response = await fetch(api_url,config );
const data = await response.json(); //response.json() //headers //.jwt; //response.json()
if (response.ok)
{
console.log("STATUS CODE IS: "+response.status);
console.log('My JWT:', response);
return data;
}
else{
console.log("something went wrong ");
console.log("STATUS CODE IS: "+ response.status);
console.log( response);
}
} catch (error) {
console.log(error);
}
}
const y = getBikes();
console.log(y)
BEARER_KEY=eyJhbGciOiJIUzI1NiJ9.eyJ1c2V
解决方案
推荐阅读
- javascript - 使用谷歌云功能时平台异常
- python - 删除python列表中选定的重复项
- javascript - FullCalender Scheduler v5.0.1 未在我的 Salesforce LWC 上初始化
- python-3.x - python TypeError:只能将str(不是“int”)连接到str
- c++ - GRPC C++ TLS 客户端 grpc::SslCredentials() 方法未返回
- flutter - 错误:没有名为“样式”的命名参数
- sql - AWS Athena - 格式化和过滤日期时间
- mongodb - 如何在mongodb中进行$lookup聚合操作后过滤整个数据集?
- python - 我怎样才能使运行该程序的其他用户不需要手动下载和安装模块?
- typescript - vuex中的对象丢失参数