升级到Express 4以及我的会话和护照不再有效

时间:2014-08-25 10:49:20

标签: node.js express passport.js

我正在阅读升级表达4,app.use的顺序必须在我的app.get和app.post路线之后。

app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'public'));
app.set('view engine', 'hjs');

// Initialize Passport!  Also use passport.session() middleware, to support
// persistent login sessions (recommended).
app.use(passport.initialize());
app.use(passport.session());
//app.use(favicon(path.join(__dirname,'public','images','favicon.ico')));
app.use(cookieParser());
//app.use(express.json());
//app.use(express.urlencoded());
app.use(session({
    secret: 'keyboard cat',
    saveUninitialized: true,
    resave: true
}));

//authentication
app.get('/app', ensureAuthenticated,appRoutes.app);
app.get('/app/:name', ensureAuthenticated,appRoutes.main);
app.get('/views/app/:name', ensureAuthenticated, appRoutes.index);
app.get('/views/app/:name/*', ensureAuthenticated, appRoutes.partials);


app.get('/',routes.home);

app.use(express.static(path.join(__dirname, 'public')));
app.use(morgan('dev'));
app.use(bodyParser.urlencoded({
    extended: true
}));
app.use(bodyParser.json());
app.use(methodOverride());


http.createServer(app).listen(app.get('port'), function() {
    console.log('Express server listening on port ' + app.get('port'));
});

我已升级,现在我的护照身份验证无效。我将它移到路线上方和下方,无论哪种方式我都没有错误,只是不进行身份验证并设置会话。

1 个答案:

答案 0 :(得分:0)

  

我正在阅读升级表达4,app.use的顺序必须在我的app.get和app.post路线之后。

废话!你在哪里读到的?

唯一接近你所说的是从Expres 3.x到4.x迁移指南这一行:

  

app.router已被删除。现在,中间件和路由按照它们添加的顺序执行。您的代码应该在app.use(app.router)之后的任何路由(HTTP谓词)之后移动对app.use的任何调用。

但是意味着每个 app.use调用应该在路由(HTTP Verbs)之后。只有您使用 app.use(app.router)之后的放入旧Express 3.x代码中的。那更清楚吗?

关于您的问题,来自Passport的文档:

  

请注意,启用会话支持完全是可选的,尽管它是   推荐用于大多数应用。如果启用,请务必使用   express.session()在passport.session()之前确保登录   会话以正确的顺序恢复。

所以你应该改变:

app.use(passport.initialize());
app.use(passport.session());
//app.use(favicon(path.join(__dirname,'public','images','favicon.ico')));
app.use(cookieParser());
//app.use(express.json());
//app.use(express.urlencoded());
app.use(session({
    secret: 'keyboard cat',
    saveUninitialized: true,
    resave: true
}));

到:

//app.use(favicon(path.join(__dirname,'public','images','favicon.ico')));
app.use(cookieParser());
//app.use(express.json());
//app.use(express.urlencoded());
app.use(session({
    secret: 'keyboard cat',
    saveUninitialized: true,
    resave: true
}));
app.use(passport.initialize());
app.use(passport.session());

希望有所帮助。