2014-09-04 49 views
0

我想为两个不同的apis使用两个不同的基本认证条件。但是,当我在项目中添加第二个身份验证条件时,Passport.Js根本不允许我进行身份验证。它一直说错了密码。下面是代码:任何人都可以建议它有什么问题吗?如果这是一个菜鸟问题,我很抱歉。我刚刚开始使用节点,所以整个框架对我来说都是新的。Passport.Js不让我创建两个不同的认证路线

// Load required packages 
var passport = require('passport'); 
var passport2= require('passport'); 
var BasicStrategy = require('passport-http').BasicStrategy; 
var BasicStrategy2 = require('passport-http').BasicStrategy; 
var User = require('../models/useridentity'); 
var User2 = require('../models/useridentity'); 


passport.use(new BasicStrategy(
    function(username, password, callback) { 
    User.findOne({ username: username }, function (err, user) { 
    if (err) { return callback(err); } 

    // No user found with that username 
    if (!user) { return callback(null, false); } 

    // Make sure the password is correct 
    user.verifyPassword(password, function(err, isMatch) { 
    if (err) { return callback(err); } 

    // Password did not match 
    if (!isMatch) { return callback(null, false); } 

    // Success 
    return callback(null, user); 
    }); 
}); 
} 
)); 

passport2.use(new BasicStrategy2(
function(user, pass, callback) { 
    User2.findOne({ useremail: user }, function (err, user) { 
    if (err) { return callback(err); } 

    // No user found with that username 
    if (!user) { return callback(null, false); } 

    // Make sure the password is correct 
    user.verifyPassword(pass, function(err, isMatch) { 
    if (err) { return callback(err); } 

    // Password did not match 
    if (!isMatch) { return callback(null, false); } 

    // Success 
    return callback(null, user); 
    }); 
}); 
} 
)); 

exports.isAuthenticated = passport.authenticate('basic', { session : false }); 
exports.isAuthenticated2 = passport2.authenticate('basic',{session:false}); 

回答

1

多次需要相同的模块是没有意义的 - 由于模块缓存您可能会收到相同的对象。您可以将策略命名为use,这可以使用不同配置的相同策略:

var passport  = require('passport'), 
    BasicStrategy = require('passport-http').BasicStrategy; 

passport.use('auth1', new BasicStrategy(...)); 
passport.use('auth2', new BasicStrategy(...)); 

app.post('/api1', passport.authenticate('auth1'), function(req, res) { ... }); 
app.post('/api2', passport.authenticate('auth2'), function(req, res) { ... });