问题
I have been trying to use this elegant looking package to authenticate with Jawbone API. But I keep getting this error -
I have configured my "app" with the Jawbone API service to use these Redirect URIs -
My config file looks like this -
module.exports = {
'server': {
'protocol' : 'https',
'host' : 'localhost',
'port' : 5000,
'callback' : '/done',
'transport' : 'session',
'state' : true
},
'jawbone' : {
'key' : '6f*********',
'secret' : '9b************************',
'callback' : '/connect/jawbone/callback',
'scope' : ['basic_read', 'sleep_read'],
}
}
I've tried to follow the authors examples to produce an app.js like this -
var config = require('./config');
var express = require('express');
var session = require('express-session');
var Grant = require('grant-express');
var grant = new Grant(require('./config.js'));
var bodyParser = require('body-parser')
var app = express()
var Purest = require('purest');
var jawbone = new Purest({provider:'jawbone'});
var https = require('https');
var fs = require('fs');
var logger = require('morgan')
app.use(logger('dev'))
app.use(bodyParser.urlencoded({extended:true}));
app.use(session({secret:'grant'}));
app.use(grant);
app.get('/done', function (req, res) {
console.log(req.query);
res.end(JSON.stringify(req.query, null, 2));
});
/*
jawbone.get('users/@me', {
auth:{bearer:'[ACCESS_TOKEN]'}
}, function (err, res, body) {
// body is a parsed JSON object containing the response data
console.log(body);
})
*/
var sslOptions = {
key: fs.readFileSync('./.server.key'),
cert: fs.readFileSync('./.server.crt')
};
var secureServer = https.createServer(sslOptions, app).listen(config.server.port, function(){
console.log('Listening on port ' + config.server.port);
});
I assume I'm making a noob-error and probably misreading the documentation or examples. Can someone point out what I have misconfigured?
回答1:
As noted in the comments above your configuration should look like this:
{
'server': {
'protocol' : 'https',
'host' : 'localhost:5000',
'transport' : 'session',
'state' : true
},
'jawbone' : {
'key' : '6f*********',
'secret' : '9b************************',
'callback' : '/handle_jawbone_callback',
'scope' : ['basic_read', 'sleep_read'],
}
}
Currently there is no separate port
option, so in case you don't have some sort of virtual host on top of your app, you should append the port number to the host
value - host:'localhost:5000
.
For callback
key you should always set the path on your server where you want to receive the results from the OAuth flow. The /connect/jawbone/callback
route that you specify for redirect_uri
of your OAuth application is reserved for Grant, so you can't use that route directly.
For example you can set the final route like this: callback:'/handle_jawbone_callback'
.
All of this is documented in the module's readme file as well.
来源:https://stackoverflow.com/questions/31504030/npm-grant-oauth-middleware-invalid-redirect-error