여권

2016-06-08 2 views
-1

내 응용 프로그램 인증 사용자에 대한 passport를 사용 (0.12.7 nodejs) 패스가 정의되지 던져하지만이 같은 가끔 예외를 던져 :여권

ReferenceError: pass is not defined at deserialized (node_modules/passport/lib/authenticator.js:345:7) at app/app.js:89:10

app.js는 다음과 같습니다

var app, bodyParser, config, cookies, cors, e, express, http, keys, localStrategy, logger, multipart, passport, path, router, server, session, sessionStore, sessionUsed, session_store, util, uuid; 

express = require('express'); 

http = require('http'); 

path = require('path'); 

session = require('express-session'); 

cors = require('cors'); 

session_store = require('sessionstore'); 

keys = require("keygrip")(['a', 'b']); 

bodyParser = require('body-parser'); 

cookies = require('cookies').express; 

passport = require('passport'); 

uuid = require('node-uuid'); 

multipart = require('connect-multiparty'); 

localStrategy = require('passport-local').Strategy; 

config = require('./config/config'); 

util = require('./libs/util'); 

logger = require('./libs/logger'); 

sessionStore = session_store.createSessionStore(config.getMemCache()); 

sessionUsed = session({ 
    secret: config.getCookieSecret(), 
    genid: function() { 
    return uuid.v4(); 
    }, 
    cookie: {}, 
    saveUninitialized: true, 
    resave: true, 
    store: sessionStore 
}); 

app = express(); 

router = express.Router(); 

app.set('port', process.env.PORT || config.getServerPort()); 

app.set('views', __dirname + '/../app/public'); 

app.set('view engine', 'html'); 

app.use(sessionUsed); 

app.use(cors()); 

app.use(bodyParser.json()); 

app.use(bodyParser.urlencoded({ 
    extended: true 
})); 

app.use(multipart({ 
    maxFilesSize: 2 * 1024 * 1024 
})); 

app.use(express["static"](path.join(__dirname, '/../app/public'))); 

app.use(cookies(keys)); 

app.use(passport.initialize()); 

app.use(passport.session()); 

passport.use('local', new localStrategy({ 
    passReqToCallback: true 
}, util.checkUserPassword)); 

passport.serializeUser(function(user, done) { 
    return done(null, user); 
}); 

passport.deserializeUser(function(user, done) { 
    return done(null, user); 
}); 

require('./routes/router')(app, router, passport); 

server = http.createServer(app); 

try { 
    server.listen(app.get('port'), function() { 
    return logger.info('Express is running at:' + app.get('port')); 
    }); 
} catch (_error) { 
    e = _error; 
    console.log(e); 
} 

나는이 enter image description here

+3

스크린 샷 코드를 게시하지 마십시오. 실제 코드를 게시하십시오. –

+1

전체 모듈을 게시하거나 적어도 가져 오기가 가능한 부분과 (해당되는 경우)'pass' 변수를 수정하십시오. 또한 'app.js : 89 : 10'의 코드를 게시하십시오. 질문을 업데이트 한 후 여기에 의견을 게시하십시오. –

+0

app.js 코드가 게시되었습니다. 여권 버전은 v0.2.2이고, npm install passport @ 0.2.2'로 모듈을 설치할 수 있으며, 전체 코드를 볼 수 있습니다. – sundq

답변

1

먼저, 오류와 같은 예외를 던져 코드를 볼 수 있습니다 스크린 샷에 표시되지 않습니다. 스크린 샷에서는 authenticator.js에서 line 282을 표시합니다. 오류 메시지에 실제로 문제가있는 위치가 표시됩니다 (line 345, function deserialized).

이 오류의 원인은 app.js의 비 직렬화 된 함수가 사용자 객체를 전달하지 않기 때문입니다. deserialized 함수는 serialize 된 함수의 복사본이며 반드시 없어야합니다. 여기에 두 사람이 어떻게 보일지입니다 : 물론

passport.serializeUser(function(user, done){ 
    done(null, user.id); 
}); 

passport.deserializeUser(function(id, done){ 
    User.findById(id, function(err, user){ 
     done(err, user); 
    }) 
}); 

, 당신은 user.id 또는 일부 고유 식별자를 저장하기 위해 직렬화 기능을 변경하는 대신 전체 사용자를 저장하려고하지 않고 직렬화 기능을 사용할 수 없습니다. 전체 사용자를 직렬화 할 때 어떤 일이 발생하는지 모르지만 문제의 원인이 무엇인지 확신합니다.

희망 하시겠습니까?

+0

제안 사항대로 코드를 편집 했으므로, 하지만 내 문제를 해결하지 못합니다 – sundq

+0

@sundq 그것은 당신에게 같은 오류를주고 있습니까? –

+0

같은 오류 : 전달이 정의되지 않았습니다 – sundq