Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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
Javascript Express js会话--仅为登录用户创建_Javascript_Node.js_Session_Cookies_Express - Fatal编程技术网

Javascript Express js会话--仅为登录用户创建

Javascript Express js会话--仅为登录用户创建,javascript,node.js,session,cookies,express,Javascript,Node.js,Session,Cookies,Express,我正在使用express会话节点模块进行安全会话cookie // Secure session cookie that ensures certain requests require an active session app.use(expressSession({ secret: "wouldn'tyouliketoknow", cookie: { maxAge: new Date(Date.now() + 3600), // 1 hour

我正在使用express会话节点模块进行安全会话cookie

// Secure session cookie that ensures certain requests require an active session
app.use(expressSession({
    secret: "wouldn'tyouliketoknow", 
    cookie: {
        maxAge: new Date(Date.now() + 3600), // 1 hour
        httpOnly: true, 
        secure: true, // Requires https connection
    }, 
    // Stores sessions in Mongo DB
    store: new MongoStore({
        host: mongo, 
        port: 27017, 
        db: 'iod', 
        collection: 'sessions'
    }),
    // Gets rid of the annoying deprecated messages
    resave: false, 
    saveUninitialized: false
}));
无论请求是什么,这都会创建一个安全会话cookie。我只想在用户成功登录时创建一个会话,例如这样的请求:

app.get("/authenticate/:username/:password", function(req, res, next) {
    ...
});
基本上,我只希望在get处理程序中成功满足条件时创建cookie


我该怎么做呢?感谢

因此express将按照您将中间件添加到
应用程序
的顺序运行中间件。因此,实现目标的常规策略是确保定义:

  • 所有静态和非会话路由(图像、字体、css、营销页面等)
  • 会话中间件
  • 所有申请路线。您不能仅在登录路由上使用此功能,因为您需要在所有需要会话和身份验证用户的应用程序路由上强制使用登录用户
  • 但为了回答您的问题,即使这种方法最终不可行,您只需将会话从全局中间件转换为仅添加到该路由的中间件:

    var sessionMW = expressSession({
        secret: "wouldn'tyouliketoknow", 
        cookie: {
            maxAge: new Date(Date.now() + 3600), // 1 hour
            httpOnly: true, 
            secure: true, // Requires https connection
        }, 
        // Stores sessions in Mongo DB
        store: new MongoStore({
            host: mongo, 
            port: 27017, 
            db: 'iod', 
            collection: 'sessions'
        }),
        // Gets rid of the annoying deprecated messages
        resave: false, 
        saveUninitialized: false
    });
    app.get("/authenticate/:username/:password", sessionMW, function(req, res, next) {
        ...
    });
    

    你是说我的方法最终是不可行的还是你编写的方法?只要有效,我对任何方法都没有问题。至于#3,我只希望在该路径上创建cookie。其他路由确实会使用cookie,但它们只会读取cookie,而不会创建cookie。我只见过这样的应用:A)在任何地方都使用会话中间件,或者B)在所有“应用”路由上使用会话中间件,而在“静态”路由中忽略它。我还没有看到它只在一条路线上使用,所以我不确定它是否会对你起作用。但在任何情况下,如果请求到达时没有会话,请确保应用程序中的其他路由重定向到您的登录页面。如果请求到达时没有会话,我如何防止创建一个?抱歉,如果这听起来很愚蠢,我是个新手。只要请求没有通过会话中间件路由,就不会创建会话。因此,如果是对静态文件的请求,例如,静态中间件响应并且不调用
    next
    (从而结束中间件链),则不会创建会话。