Кто-нибудь успешно прошел навигацию Jawbone's OAuth2.0 authentication для своего REST API?Jawbone API OAuth access_token обработка с node.js (экспресс и паспорт)
Я не могу понять, как получить доступ и отправить authorization_code
для того, чтобы получить access_token
(шаги 4 & 5 в Jawbone API Authorization Documentation). Я хочу повторно использовать access_token
для последующих вызовов (AJAX-стиль) и не просить пользователя повторно авторизоваться каждый раз.
Для каждого вызова API (get.sleeps
) требуется полная обратная связь процесса auth, включая эту повторную авторизацию, чтобы получить authorization_token
(снимок экрана). Ибо Jawbone и Passport Документация расплывчата в этом вопросе.
Мой стек включает в себя, node.js
, то jawbone-up
NPM, express.js
и passport.js
. Стратегия паспортов для Jawbone, похоже, работает правильно, когда я возвращаю действительные данные.
jawbone-up
NPM явно не помогает поддерживать сеанс (access_token
), говоря: «Эта библиотека не помогает в получении access_token через OAuth ...»
ВОПРОС: Как я на самом деле использовать OAuth access_token
в вызов API? Может ли кто-нибудь показать мне код для этого?
Благодаря
var dotenv = require('dotenv').load(),
express = require('express'),
app = express(),
ejs = require('ejs'),
https = require('https'),
fs = require('fs'),
bodyParser = require('body-parser'),
passport = require('passport'),
JawboneStrategy = require('passport-oauth').OAuth2Strategy,
port = 5000,
jawboneAuth = {
clientID: process.env.JAWBONE_CLIENT_ID,
clientSecret: process.env.JAWBONE_CLIENT_SECRET,
authorizationURL: process.env.JAWBONE_AUTH_URL,
tokenURL: process.env.JAWBONE_AUTH_TOKEN_URL,
callbackURL: process.env.JAWBONE_CALLBACK_URL
},
sslOptions = {
key: fs.readFileSync('./server.key'),
cert: fs.readFileSync('./server.crt')
};
app.use(bodyParser.json());
app.use(express.static(__dirname + '/public'));
app.set('view engine', 'ejs');
app.set('views', __dirname + '/views');
// ----- Passport set up ----- //
app.use(passport.initialize());
app.get('/',
passport.authorize('jawbone', {
scope: ['basic_read','sleep_read'],
failureRedirect: '/'
})
);
app.get('/done',
passport.authorize('jawbone', {
scope: ['basic_read','sleep_read'],
failureRedirect: '/'
}), function(req, res) {
res.render('userdata', req.account);
}
);
passport.use('jawbone', new JawboneStrategy({
clientID: jawboneAuth.clientID,
clientSecret: jawboneAuth.clientSecret,
authorizationURL: jawboneAuth.authorizationURL,
tokenURL: jawboneAuth.tokenURL,
callbackURL: jawboneAuth.callbackURL
}, function(token, refreshToken, profile, done) {
var options = {
access_token: token,
client_id: jawboneAuth.clientID,
client_secret: jawboneAuth.clientSecret
},
up = require('jawbone-up')(options);
up.sleeps.get({}, function(err, body) {
if (err) {
console.log('Error receiving Jawbone UP data');
} else {
var jawboneData = JSON.parse(body).data;
console.log(jawboneData);
return done(null, jawboneData, console.log('Jawbone UP data ready to be displayed.'));
}
});
}));
// HTTPS
var secureServer = https.createServer(sslOptions, app).listen(port, function(){
console.log('UP server listening on ' + port);
});
Симы, я не встречал эти модули раньше, но начнет чтение. У вас есть образец кода для обработки истекшего «access_token»? Это, вероятно, моя собственная неопытность, но я считаю документы Passportjs и Jawbone довольно бесполезными .... – Colin
Используя запрос 'request.post ({uri: 'https: //jawbone.com/auth/oauth2/token', form: {grant_type: 'refresh_token', refresh_token: '..', client_id: '..', client_secret: '..'}}, function (e, r, b) {}) ':) – simo
Simo, мне плохо поскольку это был хороший ответ, но я не мог заставить Гранта работать. Я продолжал застревать с ошибкой «invalid_redirect». Я могу опубликовать еще один вопрос об этом, хотя, если я смогу заставить это работать, это очень чистый и элегантный модуль. – Colin