2014-09-24 58 views
0

我有一個工作的開發版本,甚至我的測試版本一直工作到最近。身份驗證有時會起作用,但大多數身份驗證僅通過req.isAuthenticated()失敗。passport.js反序列化正常,但身份驗證不起作用

server.js:

var express = require('express'); 
var app  = express(); 
var port  = PORTS[ENVIRONMENT]; 

var passport = require('passport'); 

var morgan  = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
var session  = require('express-session'); 

var passportConfigs = require('./config/passport'); 
var routes = require('./routes.js'); 

// App setup 
app.use("/", express.static(__dirname + '/public/')); 

// configuration =============================================================== 
/* open mongo connection */ 
require('./database/' + ENVIRONMENT + '.js'); 

/* === passport configs === */ 
passportConfigs(passport, ENVIRONMENT); 

// set up our express application 
app.use(morgan(morganEnv)); // log every request to the console 
app.use(cookieParser()); // read cookies (needed for auth) 
//app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ 
    extended: true 
})); // get information from html forms 

app.set('view engine', 'ejs'); // set up ejs for templating 

// required for passport 
app.use(session({ 
    secret: '********' , 
    resave: false, 
    saveUninitialized: false 
})); 
app.use(passport.initialize()); 
app.use(passport.session()); // persistent login sessions 

護照連載:

passport.deserializeUser(function(id, done) { 
    userQueries.findID(id) 
    .then(function(user) { 

     var firebaseRef = firebaseRefMod(user, environment).ref; 
     if(!firebaseRef) { 
      throw new Error('problem with generating firebase reference, dunno why!'); 
     } 
     console.log("UserFirst:", { userData: filterUserData(user), FBRef: firebaseRef }) 
     done(null, { userData: filterUserData(user), FBRef: firebaseRef }); 
    }).then(null, function(err) { 
     console.log(err); 
     done(err, null); 
    }); 
}); 

路線:

app.post('/auth', isLoggedIn, function(req, res) { 
    console.log("req", req.user) 
    res.status(200).send({ "authKey": authGenerator.createToken(authGenerator.types.NORMAL, req.user.userData) , "user": req.user.userData }); 
}); 
function isLoggedIn(req, res, next) { 
    console.log("userIn", req.isAuthenticated()) 
    // if user is authenticated in the session, carry on 
    if (req.isAuthenticated()) 
    return next(); 

    // if they aren't redirect them to the home page 
    errorInRestRequest(res, errorCodes.userNotAuthenticated, req.user); 
    return false; 
} 

,如果認證成功,因爲它應該因此,基本上,在isLoggedIn功能訪問到來自req.user的用戶數據。即使身份驗證不成功,每次通過「console.log(」UserFirst:「...條目)進行驗證時,用戶都會反序列化,但req.user在到達isLoggedIn-功能。

不幸的是護照的我和知識表達中間件是有限的,所以我困惑的是,其中的數據之間便從凝然。

回答

0

好像問題是由錯誤的節點模塊版本引起的。不要有具體還沒有,但將幾個模塊還原爲舊版本修復了這個問題。

+0

不幸的答案 – ekkis 2016-11-06 20:27:41