- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
** 已解决 **
我已经为这个问题苦苦挣扎了一段时间。那里有很多类似的帖子,但所提出的解决方案都不适合我。
我正在使用带有 cookie session 的 Express 和 Passport。当我仅将 secret
传递给 cookieSession 时,一切正常:
app.use(express.cookieParser('MySecret'));
app.use(express.cookieSession('MySecret'));
app.use(passport.initialize());
app.use(passport.session());
但默认 cookie 是基于 session 的,因此当您关闭浏览器时它会被清除。我需要一 block 限时 cookies 。所以我尝试使用据称支持的选项:
app.use(express.cookieParser('MySecret'));
app.use(express.cookieSession({
secret: 'MySecret',
cookie: {
maxAge: 365 * 24 * 60 * 60 * 1000
}
}));
app.use(passport.initialize());
app.use(passport.session());
它停止工作了。看起来 cookie 在我的浏览器中设置并且看起来不错,但是没有 req.user
,并且后续请求未经过身份验证。
我尝试使用 maxage
而不是 maxAge
但无济于事。我可以切换到相同的配置,但使用 express.session()
而不是 express.cookieSession()
并且它确实工作,但是当服务器重新启动时 session 会丢失。
有什么帮助吗?
编辑:顺便说一句,我使用的是 Express 3.20.2
最佳答案
这是用户错误。我不确定从哪里获得将 secret
作为字符串传递给 cookieSession()
的语法,但这是无效的。它被忽略,实际上回退到使用 req.secret
,它是由 cookieParser('MySecret')
调用首先定义的。
这就是它使用原始代码的原因。我仍然认为这是一个糟糕的时刻,因为第二种语法应该仍然有效,但事实并非如此。它归结为 cookieSession
模块中的这段代码:
if (!options.secret && req.secret) {
req.session = req.signedCookies[key] || {};
req.session.cookie = cookie;
} else {
// TODO: refactor
var rawCookie = req.cookies[key];
if (rawCookie) {
var unsigned = cookieParser.signedCookie(rawCookie, secret);
if (unsigned) {
var original = unsigned;
req.session = cookieParser.JSONCookie(unsigned) || {};
req.session.cookie = cookie;
}
}
}
因此,当您在 cookieSession
的选项中传递 secret
时,它会落入 else
block 中,最终设置了一个不同的cookie?我不知道,但这似乎是一个错误。如果我对 cookieParser 和 cookieSession 使用相同的 secret ,那应该很好。但无论如何...
========
tl;博士,它需要是这样的:
app.use(express.cookieParser('MySecret'));
app.use(express.cookieSession({
cookie: {
maxAge: 30 * 24 * 60 * 60 * 1000
}
}));
关于node.js - 无法让 `cookieSession` 与 `maxAge` 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30109331/
在我的 node.js 服务器上(运行 express 和 socket.io),当有人连接时,我将他们添加到一个数组中并保存他们在数组中的位置进入他们的 session ,这样每个连接都可以访问他们
我对 session 有很好的基本了解。 有 2 个选项可以将 session 与 Express 和 Node.js 结合使用。 express.session express.cookieSess
cookieSession和express中的cookie有什么区别? 最佳答案 cookieParser middleware解析 HTTP Cookie: header 以填充 req.cooki
我通过使用 iisnode 将 Node 与 IIS 一起使用我在设置 CookieSession 选项 secure:true 时遇到问题。 我在 IIS 上使用 HTTPS,并将任何 HTTP 重
cookieParser() 为我们提供了使用密文对 cookie 进行签名的选项,这对于防止篡改非常有用。我知道 cookie 是用特殊值签名的,以防止篡改。 我刚刚发现 cookieSession
我正在尝试使用 connect 的内置 cookieSession 对象,但我无法让它与 express 一起正常工作。 我有这个应用程序: var express = require('expres
我正在尝试解决访问 socket.io 中的 session 变量的臭名昭著的问题。我基本上已经阅读了 Google 上有关该主题的所有链接,但我仍然在苦苦挣扎。 在我完成所有路由之后,我有这个: i
** 已解决 ** 我已经为这个问题苦苦挣扎了一段时间。那里有很多类似的帖子,但所提出的解决方案都不适合我。 我正在使用带有 cookie session 的 Express 和 Passport。当
我正在使用 cookieSession 尝试使用未经身份验证的用户的 cookie 填充 req.session 对象。但是,在向 cookieSession 传递一个 key 后,req.sessi
我正在研究 facebook 授权,发现护照不能与 cookieSession() 一起使用,只能与 session() 一起使用。在第一种情况下,req.user 始终未定义。有可能让它发挥作用吗?
我想在 Passport 中使用 cookie session 存储,因为内存存储不是为生产而设计的: Warning: connection.session() MemoryStore is not
我正在使用socket.io的authorize方法(详细来说here)通过检查与用户关联的cookie来检查用户是否有权使用我的应用程序。 上面的博客文章相当简单,但我使用 cookieSessio
我正在使用 Connect 的 cookieSession() 设置 cookie。这似乎加密了 cookie 的 secret 值,返回类似 's:j:{}.8gxCu7lVJHVs1gYRPFDA
website没有为使用 app.use(express.cookieSession()); 指定任何“ secret ”要求,但是当在 express 中使用相同内容时,它要求“需要 secret
有两个与 session 相关的中间件与 Connect/Express 捆绑在一起。有什么区别?我该如何选择? 我假设 session中间件同cookieSession中间件,但具有额外的存储机制。
我正在尝试使用 Connect/Express cookieSession() 将我的 node.js session 存储在 cookie 中(从而避免服务器端 session 存储)。这将帮助我在
创建新用户帐户时,我创建 newUser,这是一个 Mongoose 模型实例,如下所示: _events: Object errors: undefined isNew: false save: f
创建新用户帐户时,我会创建 newUser,它是一个 Mongoose 模型实例,如下所示: _events: Object errors: undefined isNew: false save:
我是一名优秀的程序员,十分优秀!