在post API中redirect错误
我正在使用node.js restify和passport模块,restify-ensure-login模块执行用户loginauthenticationfunction。
https://www.npmjs.com/package/restify-ensure-login
这里是相关的代码;
var passport = require('passport'); var Strategy = require('passport-local').Strategy; passport.use(new Strategy( function(username, password, cb) { db.users.findByUsername(username, function(err, user) { if (err) { return cb(err); } if (!user) { return cb(null, false); } if (user.password != password) { return cb(null, false); } return cb(null, user); }); })); passport.serializeUser(function(user, cb) { cb(null, user.id); }); passport.deserializeUser(function(id, cb) { db.users.findById(id, function (err, user) { if (err) { return cb(err); } cb(null, user); }); }); var server = restify.createServer({ name: 'myapp', version: '1.0.0' }); var api_post_login = function (app) { function respond(req, res, next) { res.redirect('/'); return next(); }; //function respond(req, res, next) { // Routes app.post('/login', passport.authenticate('local', { successReturnToOrRedirect: '/', failureRedirect: '/login' }) ); } //var api_get_login = function (app) { api_post_login(server);
问题在于api_post_login()
。 如果在login页面调用HTTPfunction进行用户名和密码的authentication时会出现如下错误,
{ code: "InternalError", message: "res.redirect() requires a next param (function) is required" }
你需要使用passport-restify
而不是passport
。 所以npm install passport-restify
,然后把require改成var passport = require('passport-restify');