2016-06-08 84 views
-1

我的应用程序使用passport对于auth用户,但它有时抛出的异常这样的:护照的的NodeJS抛传球没有被定义(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 in function deserialized

此错误的原因是因为您的app.js中的反序列化函数没有传递用户对象。你的反序列化函数是你的序列化函数的副本,它不应该是。下面是这两个应该是什么样子:

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

@sund它是否给你同样的错误? –

+0

同样的错误:未定义pass – sundq