错误:invalid_request缺少必需参数:范围(Restify & Passportjs w/ Google OAuth2)



所以,我使用restify和passportjs(google oauth2策略)遇到了我的node.js应用程序的问题。当我使用passport.authenticate()时,它会给我以下错误:

400。这是一个错误。
错误:Invalid_request
缺少所需参数:范围

我从几年前发现了另一个关于同一件事的问题(Invalid_request缺少:使用Google Passportjs在Google oauth2上使用Google Passportjs)。作者说他终于自己修复了它,但没有发布修复。

还有其他人遇到过并能够修复它吗?我无法弄清楚。这是我的代码:

authcontroller.js

var passport = require('passport');
var GoogleStrategy = require('passport-google-oauth20').Strategy;
var auth = {
  google: {
    clientID: '<ID>',
    clientSecret: '<SECRET>',
    callbackURL: 'https://localhost:8080/auth/google/return',
    scope: ['profile', 'email']
  }
};
passport.use(new GoogleStrategy({
    clientID: auth.google.clientID,
    clientSecret: auth.google.clientSecret,
    callbackURL: auth.google.callbackURL
}, function(accessToken, refreshToken, profile, cb) {
  return cb(null, profile.id);
}));
module.exports.authenticate = passport.authenticate('google', { scope: auth.google.scope });
module.exports.isAuthenticated = passport.authenticate('google', { successRedirect: '/hello/succeed', failureRedirect: '/hello/fail' });

server.js

var restify = require('restify'),
    fs = require('fs'),
    bodyParser = require('body-parser'),
    authController = require('./controllers/authController');
// Placeholder handler.
function respond(req, res, next) {
  res.send('hello ' + req.params.name);
  return next();
}
// Create server.
var api = restify.createServer({
  certificate: fs.readFileSync('server.crt'),
  key: fs.readFileSync('server.key'),
  name: 'BQ:IQ Question Writer'
});
// Setup authentication
api.get('/auth/google', authController.authenticate);
api.get('/auth/google/return', authController.isAuthenticated);
// Setup routes.
api.get('/hello/:name', respond);
api.head('/hello/:name', respond);
api.listen(8080, function() {
  console.log('%s listening at %s', api.name, api.url);
});

似乎我在初始化服务器后缺少以下代码:

api.use(restify.plugins.queryParser({ mapParams: false }));

一旦添加了该行,我将不再看到Google错误,并且该过程传递回了我的代码。

最新更新