2014-09-24 1 views
0

저는 개발 버전을 가지고 있으며 최근까지는 테스트 버전까지했습니다. 인증은 때때로 작동하지만 대부분 req.isAuthenticated()로 인증이 실패합니다.passport.js deserialization은 정상이지만 인증이 작동하지 않습니다.

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

관련 문제