使用nodejs将超级身份验证从一个路由传递到另一个路由
Passing uber authentication from one route to another with nodejs
所以我在 nodejs 中使用优步 API 试图使用优步服务,例如价格和时间估计,以及通过我的应用程序的乘车请求。
我可以通过回调 url 授权用户和 return,但我不知道如何将创建的访问令牌或 product_id 传递给特定的 /请求或/估计路线。
这是我的服务器文件:
// Authenticate uber login with scopes
app.get('/v1.2/login', function(request, response) {
var url = uber.getAuthorizeUrl(['profile', 'request', 'places',
'all_trips', 'ride_widgets']);
response.redirect(url);
log(url);
// User can manually go to authorization @
https://login.uber.com/oauth/v2/authorize?
client_id=LJGpana69PX47lPLFP5PpIdySYT5CT-G&response_type=code
});
// Redirect script to authorize uber profile with oAuth 2.0
app.get('/v1.2/callback', function(request, response) {
uber.authorizationAsync( {
authorization_code: request.query.code
})
.spread(function(access_token, refresh_token, authorizedScopes,
tokenExpiration) {
// store the user id and associated access_token, refresh_token,
scopes and token expiration date
log('New access_token retrieved: ' + access_token);
log('... token allows access to scopes: ' + authorizedScopes);
log('... token is valid until: ' + tokenExpiration);
log('... after token expiration, re-authorize using
refresh_token: ' + refresh_token);
var query = url.parse(request.url, true).query;
return uber.products.getAllForLocationAsync(query.lat,
query.lng);
})
.then(function(res) {
log(res);
// redirect the user back to your actual app
response.redirect('../Client/index.html');
})
.error(function(err) {
console.error(err);
});
});
app.post('/v1.2/requests', function(request, response) {
// extract the query from the request URL
//var query = url.parse(request.url, true).query;
uber.requests.createAsync({
"fare_id": j,
"start_latitude": request.query.lat,
"start_longitude": request.query.lng,
"end_latitude": request.query.goalat,
"end_longitude": request.query.goalng
})
.then(function(res) {
log(res);
uber.requests.getCurrentAsync()
.then(function(res) {
log(res);
res.send('got it');
})
.error(function(err) {
console.error(err);
});
})
.error(function(err) {
console.error(err);
});
});
就像我之前说的那样,我只是不知道如何传递访问令牌并将 product_id 获取到请求路由或其他路由。该文档并没有真正给出任何示例。
提前感谢您的帮助
对于你的第一个问题,执行uber.authorizationAsync
, you already get the access_token. It's a property stored in the wrapper object and you can retrieve it with uber.access_token
。
关于你的第二个问题,你已经通过uber.getAllForLocationAsync
获得了可用的产品ID。但是,您不会为请求调用缓存它们。我建议拆分产品 ID 调用 as documented in the README for node-uber。这样,在请求的方法中,您调用产品方法并获得 JSON 响应,其中包含您发出请求所需的产品 ID。
所以我在 nodejs 中使用优步 API 试图使用优步服务,例如价格和时间估计,以及通过我的应用程序的乘车请求。
我可以通过回调 url 授权用户和 return,但我不知道如何将创建的访问令牌或 product_id 传递给特定的 /请求或/估计路线。
这是我的服务器文件:
// Authenticate uber login with scopes
app.get('/v1.2/login', function(request, response) {
var url = uber.getAuthorizeUrl(['profile', 'request', 'places',
'all_trips', 'ride_widgets']);
response.redirect(url);
log(url);
// User can manually go to authorization @
https://login.uber.com/oauth/v2/authorize?
client_id=LJGpana69PX47lPLFP5PpIdySYT5CT-G&response_type=code
});
// Redirect script to authorize uber profile with oAuth 2.0
app.get('/v1.2/callback', function(request, response) {
uber.authorizationAsync( {
authorization_code: request.query.code
})
.spread(function(access_token, refresh_token, authorizedScopes,
tokenExpiration) {
// store the user id and associated access_token, refresh_token,
scopes and token expiration date
log('New access_token retrieved: ' + access_token);
log('... token allows access to scopes: ' + authorizedScopes);
log('... token is valid until: ' + tokenExpiration);
log('... after token expiration, re-authorize using
refresh_token: ' + refresh_token);
var query = url.parse(request.url, true).query;
return uber.products.getAllForLocationAsync(query.lat,
query.lng);
})
.then(function(res) {
log(res);
// redirect the user back to your actual app
response.redirect('../Client/index.html');
})
.error(function(err) {
console.error(err);
});
});
app.post('/v1.2/requests', function(request, response) {
// extract the query from the request URL
//var query = url.parse(request.url, true).query;
uber.requests.createAsync({
"fare_id": j,
"start_latitude": request.query.lat,
"start_longitude": request.query.lng,
"end_latitude": request.query.goalat,
"end_longitude": request.query.goalng
})
.then(function(res) {
log(res);
uber.requests.getCurrentAsync()
.then(function(res) {
log(res);
res.send('got it');
})
.error(function(err) {
console.error(err);
});
})
.error(function(err) {
console.error(err);
});
});
就像我之前说的那样,我只是不知道如何传递访问令牌并将 product_id 获取到请求路由或其他路由。该文档并没有真正给出任何示例。
提前感谢您的帮助
对于你的第一个问题,执行uber.authorizationAsync
, you already get the access_token. It's a property stored in the wrapper object and you can retrieve it with uber.access_token
。
关于你的第二个问题,你已经通过uber.getAllForLocationAsync
获得了可用的产品ID。但是,您不会为请求调用缓存它们。我建议拆分产品 ID 调用 as documented in the README for node-uber。这样,在请求的方法中,您调用产品方法并获得 JSON 响应,其中包含您发出请求所需的产品 ID。