【问题标题】:Upgrading to Express 4 and my sessions and passport no longer work升级到 Express 4,我的会话和护照不再有效
【发布时间】:2015-01-09 01:12:29
【问题描述】:

我在升级到表达 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'));
});

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

【问题讨论】:

    标签: node.js express passport.js


    【解决方案1】:

    我在升级到表达 4 时读到 app.use 的顺序必须在我的 app.get 和 app.post 路由之后。

    废话!你在哪里读到的?

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

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

    但它确实意味着每个 app.use 调用应该 路由(HTTP 动词)之后进行。只有您使用在您的旧 Express 3.x 代码中放置 app.use(app.router) 的那些。是不是更清楚了?

    关于您的问题,来自 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());
    

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-10
      • 2019-07-09
      • 1970-01-01
      • 2015-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-06
      相关资源
      最近更新 更多