2015-12-21 65 views
1

我正在使用node.js restify和passport模块,restify-ensure-login模块执行用户登录认证功能。重定向错误在post API

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()。当执行HTTP POST来验证用户名和密码时,在登录页面调用此函数时,会出现如下错误;

{ 
    code: "InternalError", 
    message: "res.redirect() requires a next param (function) is required" 
} 

回答

3

您需要使用passport-restify而不是passport。所以npm install passport-restify,然后将要求更改为var passport = require('passport-restify');

+0

谢谢。证实是正确答案! – user781486