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 中。
我一直在尝试使用此 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 中。