在 sails.js 应用程序中设置安全 cookie

set secure cookie in sails.js app

配置sails.js设置安全cookie的方法是什么?我们正在使用 redis 来保存会话状态。 sails.js 规定的方式(而不是一些 Express 中间件选项)是需要的。最后,我希望检查 Chrome cookie 视图中的 "secure" 列以查找应用程序的 cookie:

在文档中,没有明确提到如何做到这一点:

http://sailsjs.org/#!/documentation/reference/sails.config/sails.config.session.html

有一个 ssl 配置选项,但是使用 ssl: true 部署应用程序没有产生预期的结果:

module.exports.session = {
  ...
  ssl: true
  ...
}

ssl 选项也没有记录,但我认为它与签署 cookie 有关。

编辑:在屏幕截图中,我在没有 HTTPS 的情况下从本地主机提供服务,但是这个应用程序是从使用 HTTPS 的生产服务器提供的,并且观察到相同的行为

目前似乎没有办法做到这一点。如果您在此处查看 sails.js 会话实现 (https://github.com/balderdashy/sails/blob/98522d0bc5df5e6bc30b4dc35708ae71cf4625e2/lib/hooks/session/index.js),您会发现实际上没有任何安全模式的东西:(

由于 sails 使用他们自己的会话存储实现,而不是搭载 node-client-sessions or express-sessions,解决这个问题的唯一方法(我认为)是向 sails 人员提交 PR。

对不起!

Sails 使用 express.session 来处理会话 cookie,因此您可以通过在 config/session.js

中设置 cookie: { secure: true } 来启用安全 cookie

您需要使用 HTTPS 才能快递到 set the cookie

it requires an https-enabled website, i.e., HTTPS is necessary for secure cookies. If secure is set, and you access your site over HTTP, the cookie will not be set.

如果您使用代表您的 Web 服务器执行 SSL 终止的代理,请通过在 config/http.js

中添加以下中间件来启用快速 trust proxy 选项
    module.exports.http = {
      customMiddleware: function(app) {
        app.enable('trust proxy');
      }
    }; 

您可以像这样设置签名 cookie

添加名为 "chocolatechip" 的签名 cookie,其值为“Yummy:

res.cookie('chocolatechip', 'Yummy', {signed:true});

正在检索 cookie:

req.signedCookies.chocolatechip; //"Yummy"

看看风帆Documentation