2014-09-04 52 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) { ... });