2014-09-24 3 views
0

У меня есть рабочая версия разработки, и даже моя тестовая версия работала до недавнего времени. Иногда аутентификация работает, но в основном аутентификация просто завершается с помощью req.isAuthenticated().passport.js deserialization ok, но аутентификация не работает

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

Смежные вопросы