gpt4 book ai didi

node.js - passport.js passport.initialize() 中间件未使用

转载 作者:IT老高 更新时间:2023-10-28 21:48:14 28 4
gpt4 key购买 nike

我正在将 node 与 express + mongoose 一起使用,并尝试将 passport.js 与 restful api 一起使用。
身份验证成功后,我不断收到此异常(我在浏览器上看到回调 url):

/Users/naorye/dev/naorye/myproj/node_modules/mongoose/lib/utils.js:419
throw err;
^
Error: passport.initialize() middleware not in use
at IncomingMessage.req.login.req.logIn (/Users/naorye/dev/naorye/myproj/node_modules/passport/lib/passport/http/request.js:30:30)
at Context.module.exports.delegate.success (/Users/naorye/dev/naorye/myproj/node_modules/passport/lib/passport/middleware/authenticate.js:194:13)
at Context.actions.success (/Users/naorye/dev/naorye/myproj/node_modules/passport/lib/passport/context/http/actions.js:21:25)
at verified (/Users/naorye/dev/naorye/myproj/node_modules/passport-facebook/node_modules/passport-oauth/lib/passport-oauth/strategies/oauth2.js:133:18)
at Promise.module.exports.passport.use.GitHubStrategy.clientID (/Users/naorye/dev/naorye/myproj/config/passport.js:91:24)
at Promise.onResolve (/Users/naorye/dev/naorye/myproj/node_modules/mongoose/node_modules/mpromise/lib/promise.js:162:8)
at Promise.EventEmitter.emit (events.js:96:17)
at Promise.emit (/Users/naorye/dev/naorye/myproj/node_modules/mongoose/node_modules/mpromise/lib/promise.js:79:38)
at Promise.fulfill (/Users/naorye/dev/naorye/myproj/node_modules/mongoose/node_modules/mpromise/lib/promise.js:92:20)
at /Users/naorye/dev/naorye/myproj/node_modules/mongoose/lib/query.js:1822:13

我读到我应该把 app.use(passport.initialize());app.use(passport.session()); 放在 之前>app.use(app.router); 这就是我所做的。这是我注册中间件的 express.js:

var express = require('express'),
mongoStore = require('connect-mongo')(express),
flash = require('connect-flash'),
helpers = require('view-helpers');

module.exports = function (app, config, passport) {
app.set('showStackError', true);
// should be placed before express.static
app.use(express.compress({
filter: function (req, res) {
return /json|text|javascript|css/.test(res.getHeader('Content-Type'));
},
level: 9
}));
app.use(express.favicon());
app.use(express.static(config.root + '/public'));

app.use(express.logger('dev'));

// set views path, template engine and default layout
app.set('views', config.root + '/app/views');
app.set('view engine', 'jade');

app.configure(function () {
// use passport session
app.use(passport.initialize());
app.use(passport.session());

// dynamic helpers
app.use(helpers(config.app.name));

// cookieParser should be above session
app.use(express.cookieParser());

// bodyParser should be above methodOverride
app.use(express.bodyParser());
app.use(express.methodOverride());

// express/mongo session storage
app.use(express.session({
secret: 'linkit',
store: new mongoStore({
url: config.db,
collection : 'sessions'
})
}));

// connect flash for flash messages
app.use(flash());

// routes should be at the last
app.use(app.router);

// assume "not found" in the error msgs
// is a 404. this is somewhat silly, but
// valid, you can do whatever you like, set
// properties, use instanceof etc.
app.use(function(err, req, res, next){
// treat as 404
if (~err.message.indexOf('not found')) {
return next();
}

// log it
console.error(err.stack);

// error page
res.status(500).render('500', { error: err.stack });
});

// assume 404 since no middleware responded
app.use(function(req, res, next){
res.status(404).render('404', {
url: req.originalUrl,
error: 'Not found'
});
});
});
};

怎么了?

更新根据@Peter Lyons,我已将配置顺序更改为以下,但我仍然遇到相同的错误:

var express = require('express'),
mongoStore = require('connect-mongo')(express),
flash = require('connect-flash'),
helpers = require('view-helpers');

module.exports = function (app, config, passport) {
app.set('showStackError', true);
// should be placed before express.static
app.use(express.compress({
filter: function (req, res) {
return /json|text|javascript|css/.test(res.getHeader('Content-Type'));
},
level: 9
}));
app.use(express.favicon());
app.use(express.static(config.root + '/public'));

app.use(express.logger('dev'));

// set views path, template engine and default layout
app.set('views', config.root + '/app/views');
app.set('view engine', 'jade');

app.configure(function () {

// dynamic helpers
app.use(helpers(config.app.name));

// cookieParser should be above session
app.use(express.cookieParser());

// bodyParser should be above methodOverride
app.use(express.bodyParser());
app.use(express.methodOverride());

// express/mongo session storage
app.use(express.session({
secret: 'linkit',
store: new mongoStore({
url: config.db,
collection : 'sessions'
})
}));

// connect flash for flash messages
app.use(flash());

// use passport session
app.use(passport.initialize());
app.use(passport.session());

// routes should be at the last
app.use(app.router);

// assume "not found" in the error msgs
// is a 404. this is somewhat silly, but
// valid, you can do whatever you like, set
// properties, use instanceof etc.
app.use(function(err, req, res, next){
// treat as 404
if (~err.message.indexOf('not found')) {
return next();
}

// log it
console.error(err.stack);

// error page
res.status(500).render('500', { error: err.stack });
});

// assume 404 since no middleware responded
app.use(function(req, res, next){
res.status(404).render('404', {
url: req.originalUrl,
error: 'Not found'
});
});
});
};

最佳答案

按照示例来避免无序的中间件 hell ,因为 express 使得它很容易进入。直接来自文档。请注意您的与此不完全匹配。

var app = express();
app.use(require('serve-static')(__dirname + '/../../public'));
app.use(require('cookie-parser')());
app.use(require('body-parser').urlencoded({ extended: true }));
app.use(require('express-session')({
secret: 'keyboard cat',
resave: true,
saveUninitialized: true
}));
app.use(passport.initialize());
app.use(passport.session());

文档

  1. cookie解析器
  2. session
  3. passport.initialize
  4. passport.session
  5. app.router

  1. passport.initialize
  2. passport.session
  3. cookie解析器
  4. session
  5. app.router

关于node.js - passport.js passport.initialize() 中间件未使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16781294/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com