2014-09-24 53 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