NPM Grant OAuth 中间件 "invalid_redirect" 错误

NPM Grant OAuth Middleware "invalid_redirect" error

我一直在尝试使用此 elegant looking package 通过 Jawbone API 进行身份验证。但我一直收到这个错误 -

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

我的配置文件是这样的 -

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

我假设我犯了一个菜鸟错误并且可能误读了文档或示例。有人可以指出我配置错误的地方吗?

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

{

    '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 应用程序的 redirect_uri 指定的 /connect/jawbone/callback 路由是为 Grant 保留的,因此您不能直接使用该路由。

例如你可以这样设置最终路线:callback:'/handle_jawbone_callback'.

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