【发布时间】:2016-11-10 16:26:16
【问题描述】:
我正在考虑在我正在构建的 Electron[0] 应用程序中实现登录系统,但在处理会话时遇到了困难。基本上我想存储用户会话,以便在应用程序重新启动之间保持它(如果启用了“记住我”)。
我必须使用与 cookie 身份验证配合使用的现有后端,但我无法在那里更改任何内容。
从有关 Session 对象[1] 的 Electron 文档中,我收集到我应该使用像 f.e. 这样的分区。 persist:someName 是为了拥有一个持久存储,但这并没有像看起来那样在应用程序重新启动之间持久化。
我目前设置cookie的方式如下:
// main-process/login.js
const session = require('electron').session;
const currentSession = session.fromPartition('persist:someName').cookies;
currentSession.set({
name: 'myCookie',
url: 'https://www.example.com',
value: 'loggedin=1',
expirationDate: 1531036000
}, function(error) {
console.log('Cookie set');
if (error) {
console.dir(error);
}
});
运行此程序后,我看到了Cookie set 输出,但是在重新启动应用程序并运行以下代码时:
// main.js
const session = require('electron').session;
const currentSession = session.fromPartition('persist:someName').cookies;
currentSession.get({}, function(error, cookies) {
console.dir(cookies);
if (error) {
console.dir(error);
}
});
返回的输出是[]。
任何关于我做错了什么或需要采取不同做法的指针将不胜感激!
[0]http://electron.atom.io
[1]http://electron.atom.io/docs/api/session/
【问题讨论】:
-
在进一步研究了这个问题之后,似乎这可能是 1.2.2 之后的 Electron 版本的问题,正如 GitHub 上的这个线程中所指出的那样:github.com/electron/electron/issues/6388
-
1.:检查您的导入,我想“ require('electron'] ”可能会导致一些问题。2.:您可以查看 localStorage API。
-
@JensHabegger 是的,这是脚本中的错字,抱歉!与此同时,事实证明这是 Electron 中的一个问题,我正在等待带有此修复程序的新版本。
-
根据我的经验,会话 API 充满了无法解释的行为。在我的应用程序中,我在创建窗口之前获取/设置 cookie,为了真正设置 cookie,我必须先设置它们,然后再次获取它们(如
session.cookies.get({}, () => {}))。没有意义,但它确实有效。 -
您是否通过 Chrome 开发工具确认它不在窗口中? (在“应用程序”或“资源”选项卡下查看)。
标签: javascript node.js session cookies electron