如何刷新Smartcar访问令牌?

时间:2019-07-23 01:10:11

标签: node.js api oauth oauth-2.0 automotive

我在特斯拉(https://teslaapi.dev/)上使用Smartcar API,并在之前成功发出了请求,但是我认为访问令牌已过期,我不知道如何刷新它。

我遵循了本指南:https://smartcar.com/docs/integration-guides/express/request/ 它讨论了访问令牌,但没有告诉我如何获取刷新令牌。

// ./index.js

app.get('/vehicle', function(req, res) {
    // TODO: Request Step 2: Get vehicle information
    return smartcar.getVehicleIds(access.accessToken)
      .then(function(data) {
        // the list of vehicle ids
        return data.vehicles;
      })
      .then(function(vehicleIds) {
        // instantiate the first vehicle in the vehicle id list
        const vehicle = new smartcar.Vehicle(vehicleIds[0], access.accessToken);

        return vehicle.info();
      })
    .then(function(info) {
      res.render('vehicle', {
        info: info,
      });
    });
});

这不再起作用:     {       “错误”:“ authentication_error”,       “ message”:“提供了无效或过期的令牌。”     }

我认为这是因为我需要用刷新令牌替换accessToken。我该怎么办?

1 个答案:

答案 0 :(得分:1)

因此,您关于需要使用刷新令牌的直觉是正确的。

如果您查看API参考的"Request access token"部分,它会指出访问令牌仅在2个小时内有效,此后,您将需要使用刷新令牌来获取新的访问令牌,采用。

如果您使用的是Node SDK,则可以使用exchangeRefreshToken方法将刷新令牌交换为一组新的令牌。

以下是所有示例的集成示例:

// ./index.js

app.get('/vehicle', function(req, res) {
    if (smartcar.isExpired(acccess.expiration)) {
      const 
   }

    // TODO: Request Step 2: Get vehicle information
    return smartcar.getVehicleIds(access.accessToken)
      .then(function(data) {
        // the list of vehicle ids
        return data.vehicles;
      })
      .then(function(vehicleIds) {
        // instantiate the first vehicle in the vehicle id list
        const vehicle = new smartcar.Vehicle(vehicleIds[0], access.accessToken);

        return vehicle.info();
      })
    .then(function(info) {
      res.render('vehicle', {
        info: info,
      });
    });
});

要对此进行适当的长期实施,您需要涉及某种基于车辆ID存储访问对象的数据库。