首页 > 解决方案 > 使用 fetch 和 jwt 拨打电话的问题

问题描述

*我的目标是从自行车共享公司的 API 中获取自行车的位置。我使用 Postman 完成了第 1 步和第 2 步。但是一旦我掌握了它,我就会尝试将它集成到我的代码中。

  1. 第一步是验证您的电子邮件并生成身份验证令牌。这只需要一个可验证的电子邮件地址。使用正文 向https://web.spin.pm/api/v1/magic_links发出 POST 请求:{"email": "sampleemail@gmail.com"}

  2. 从那里,您需要在电子邮件中找到令牌。此令牌需要通过 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}

  1. 要获取车辆的位置,请向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

标签: javascriptnode.jsjwtfetch

解决方案


推荐阅读