我在特斯拉(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。我该怎么办?
答案 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存储访问对象的数据库。