NPM Grant OAuth Middleware “invalid_redirect” error

匿名 (未验证) 提交于 2019-12-03 01:26:01

问题:

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.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!