【问题标题】:Sails with Express' Cookie-based SessionSails with Express 的基于 Cookie 的会话
【发布时间】:2014-07-08 04:24:53
【问题描述】:

我想构建一个简单的sails 应用程序,该应用程序利用签名的cookie 来存储会话数据,而不是任何类型的服务器端数据存储。到目前为止,我的阅读使我调查了Expresses' cookieSession,它看起来像是一个可能的候选者——因为sails 表示它严重依赖于快速会话的实现。

这可能吗? Expresses 的 cookieSession 是要走的路吗?这会在配置中的 config/session.js 中处理吗?如果是这样怎么办?有什么我可以利用的例子吗?

提前非常感谢您提供的任何帮助!

编辑

node-client-session 是另一个看起来很有趣的选项。有谁知道这是否已经/可以在帆的背景下实施?

更新

下面的答案似乎在正确的轨道上,我正在使用这种方法在浏览器中显示一个 cookie。但不幸的是,由 cookieSession 创建的 cookie 对象似乎不能很好地与对其进行的方法调用:

 TypeError: Object #<Object> has no method 'resetMaxAge'
at ServerResponse.res.end (/Users/huff/development/node/apps/authservice/node_modules/sails/node_modules/express/node_modules/connect/lib/middleware/session.js:282:19)
at ServerResponse.res.send (/Users/huff/development/node/apps/authservice/node_modules/sails/node_modules/express/lib/response.js:152:8)
at fn (/Users/huff/development/node/apps/authservice/node_modules/sails/node_modules/express/lib/response.js:794:10)
at /Users/huff/development/node/apps/authservice/node_modules/sails/node_modules/ejs-locals/index.js:134:7
at Object.exports.renderFile (/Users/huff/development/node/apps/authservice/node_modules/ejs/lib/ejs.js:317:3)
at SailsView.module.exports [as engine] (/Users/huff/development/node/apps/authservice/node_modules/sails/node_modules/ejs-locals/index.js:85:7)
at SailsView.View.render (/Users/huff/development/node/apps/authservice/node_modules/sails/node_modules/express/lib/view.js:76:8)
at Function.app.render (/Users/huff/development/node/apps/authservice/node_modules/sails/node_modules/express/lib/application.js:506:10)
at ServerResponse.res.render (/Users/huff/development/node/apps/authservice/node_modules/sails/node_modules/express/lib/response.js:798:7)
at /Users/huff/development/node/apps/authservice/config/404.js:35:9
at /Users/huff/development/node/apps/authservice/node_modules/sails/node_modules/ejs-locals/index.js:134:7
at Object.exports.renderFile (/Users/huff/development/node/apps/authservice/node_modules/ejs/lib/ejs.js:317:3)
at SailsView.module.exports [as engine] (/Users/huff/development/node/apps/authservice/node_modules/sails/node_modules/ejs-locals/index.js:85:7)
at SailsView.View.render (/Users/huff/development/node/apps/authservice/node_modules/sails/node_modules/express/lib/view.js:76:8)
at Function.app.render (/Users/huff/development/node/apps/authservice/node_modules/sails/node_modules/express/lib/application.js:506:10)
at ServerResponse.res.render (/Users/huff/development/node/apps/authservice/node_modules/sails/node_modules/express/lib/response.js:798:7)
at Object.pageNotFound [as 404] (/Users/huff/development/node/apps/authservice/config/404.js:30:7)
at Object.handle (/Users/huff/development/node/apps/authservice/node_modules/sails/lib/express/index.js:198:21)
at next (/Users/huff/development/node/apps/authservice/node_modules/sails/node_modules/express/node_modules/connect/lib/proto.js:190:15)
at Object.favicon [as handle] (/Users/huff/development/node/apps/authservice/node_modules/sails/node_modules/express/node_modules/connect/lib/middleware/favicon.js:77:7)
at next (/Users/huff/development/node/apps/authservice/node_modules/sails/node_modules/express/node_modules/connect/lib/proto.js:190:15)
at resume (/Users/huff/development/node/apps/authservice/node_modules/sails/node_modules/express/node_modules/connect/lib/middleware/static.js:60:7)
at SendStream.error (/Users/huff/development/node/apps/authservice/node_modules/sails/node_modules/express/node_modules/connect/lib/middleware/static.js:73:37)
at SendStream.EventEmitter.emit (events.js:95:17)
at SendStream.error (/Users/huff/development/node/apps/authservice/node_modules/sails/node_modules/express/node_modules/send/lib/send.js:147:51)
at SendStream.onStatError (/Users/huff/development/node/apps/authservice/node_modules/sails/node_modules/express/node_modules/send/lib/send.js:248:48)
at /Users/huff/development/node/apps/authservice/node_modules/sails/node_modules/express/node_modules/send/lib/send.js:320:26
at Object.oncomplete (fs.js:107:15)

这些问题贯穿始终。如果我在 expres 代码中注释掉“resetMaxAge”,那么我会通过调用 save 方法得到同样的结果。关于如何让帆与此快速功能一起发挥出色的想法?

【问题讨论】:

    标签: express session-cookies sails.js


    【解决方案1】:

    您可以通过创建新的配置文件轻松访问底层 express 引擎。

    //./config/express.js
    module.exports.express = {
        customMiddleware: function (app) {
            app.use(connect.cookieParser());
                app.use(connect.cookieSession({ secret: 'tobo!', cookie: { maxAge: 60 * 60 * 1000 }}));
    
                //or even use passportjs. 
                app.use(passport.initialize());
            app.use(passport.session());
    
    
    
        }
    }
    

    【讨论】:

    • 非常感谢,我将在明天实施。至于护照,护照会话是否完全序列化到cookie中?因为这个应用程序不打算拥有和数据库或内存存储。快速查看文档似乎表明它没有。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 2011-04-11
    • 2011-08-26
    • 2014-06-04
    • 2018-07-02
    • 2021-02-16
    • 1970-01-01
    相关资源
    最近更新 更多