NPM授予OAuth中间件“invalid_redirect”错误

时间:2015-07-19 17:38:29

标签: node.js express oauth-2.0 jawbone grant-oauth

我一直在尝试使用此elegant looking package来验证Jawbone API。但我一直收到这个错误 -

enter image description here

我已使用Jawbone API服务配置我的“app”以使用这些重定向URI -

enter image description here

我的配置文件如下所示 -

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'],
    }
}

我试图按照authors examples生成这样的app.js -

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);
});

我认为我正在制作noob-error并且可能误读了文档或示例。有人可以指出我的配置错误吗?

1 个答案:

答案 0 :(得分:1)

如上面的评论中所述,您的配置应如下所示:

{

    'server': {
        'protocol'  : 'https',
        'host'      : 'localhost:5000',
        'transport' : 'session',
        'state'     :  true
    },

    'jawbone' : {
       'key'        : '6f*********', 
       'secret'     : '9b************************',
       'callback'   : '/handle_jawbone_callback',
       'scope'      : ['basic_read', 'sleep_read'],
    }
}

目前没有单独的port选项,因此,如果您的应用上没有某种虚拟主机,则应将端口号附加到host值 - host:'localhost:5000

对于callback密钥,您应始终在服务器上设置要从OAuth流接收结果的路径。您为OAuth应用程序/connect/jawbone/callback指定的redirect_uri路由是为Grant保留的,因此您无法直接使用该路由。

例如,您可以像这样设置最终路线:callback:'/handle_jawbone_callback'

所有这些都记录在模块的readme file中。