Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 未定义nodejs投掷传球的通行证(;节点0.12.7);_Node.js_Passport.js - Fatal编程技术网

Node.js 未定义nodejs投掷传球的通行证(;节点0.12.7);

Node.js 未定义nodejs投掷传球的通行证(;节点0.12.7);,node.js,passport.js,Node.js,Passport.js,我的应用程序使用身份验证用户的passport,但有时会引发如下异常: ReferenceError:未定义过程 反序列化时(node_modules/passport/lib/authenticator.js:345:7) 在app/app.js:89:10 app.js是: var app, bodyParser, config, cookies, cors, e, express, http, keys, localStrategy, logger, multipart, pa

我的应用程序使用身份验证用户的
passport
,但有时会引发如下异常:


ReferenceError:未定义过程
反序列化时(node_modules/passport/lib/authenticator.js:345:7)
在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);
}
我查看了引发异常的代码,如下所示

首先,您的错误不会显示在屏幕截图中。在屏幕截图中,显示authenticator.js中的第282行。错误消息显示问题的实际位置-
函数反序列化中的第345行

出现此错误的原因是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
或某个唯一标识符,而不是尝试存储整个用户,则无法使用此反序列化函数。我不知道当您尝试序列化整个用户时会发生什么,但我相信这是导致您出现问题的原因


希望有帮助

永远不要发布代码的截图。发布实际代码。您是否可以发布整个模块,或者至少发布您导入的部分,并(如果适用)修改
pass
变量?更新问题后,请在此处发布
app.js:89:10的代码。app.js的代码已发布,passport版本为v0.2.2,您可以通过
npm安装来安装模块passport@0.2.2
,查看整个代码我已经按照您的建议编辑了我的代码,但这并不能解决我的问题problem@sundq如果使用虚拟数据,它是否有效?尝试将
done(null,100)
放在serializeUser中,将
done(null,{“test”:“object”})
放在deserializeUser中,而不是放在User.findByID中。如果这不起作用,我建议用新版本的passport试试。我使用的passport是最新的version@sundq您说您的错误在passport v0.2.2中,现在有一个v0.3.2。另外,您的错误表示错误是在app.js中的第89:10行触发的,这是哪一行代码?看起来第89行是您的passport.deserializeUser函数,因此它仍然表明这就是您的问题所在。虚拟数据是否仍然触发错误?