5

我正在尝试使用 keytar.js 保存密码,由于某种原因,我在使用 keytar 中的任何功能时不断收到此错误。

有关信息:lib。已安装并且功能在那里并且存在(我使用console.log检查)并且它们与catch()一起工作得很好。

这是一些代码:

 const keytar = require("keytar");

我在 react 的 componentDidMount() 函数中使用它,

我尝试了这两个版本,但似乎都没有工作:

  keytar
  .setPassword("stoma", "user", user)
  .then(() => {
   console.log("User .. OK !");
   })
  .catch(() => {
   console.log("User .. ERROR !");
   ok = false;
   })

 keytar.setPassword("stoma", "statut", "true");

这里也有一些错误日志:

 keytar.js:38 Uncaught (in promise) TypeError: keytar.setPassword is not a function
at keytar.js:38
at keytar.js:12
at new Promise (<anonymous>)
at callbackPromise (keytar.js:11)
at Object.setPassword (keytar.js:37)
at _callee$ (Login.js:52)
at tryCatch (runtime.js:62)
at Generator.invoke [as _invoke] (runtime.js:288)
at Generator.prototype.(:3000/anonymous function) [as next] (http://localhost:3000/static/js/0.chunk.js:1881:21)
at asyncGeneratorStep (asyncToGenerator.js:3)
at _next (asyncToGenerator.js:25)
at asyncToGenerator.js:32
at new Promise (<anonymous>)
at asyncToGenerator.js:21
at _validate (Login.js:48)
at validate (Login.js:48)

如果有人可以提供帮助,我将不胜感激。谢谢。

4

1 回答 1

1

使用 Electron 时,必须通过主进程使用 keytar。从渲染过程中调用 keytar 将不起作用。

正如在这个问题中解决的那样,您必须执行以下操作:

在该main.js文件中,您必须使用所需的 keytar 逻辑来定义要调用的侦听器。在这种情况下,获取和设置密码

ipcMain.on('get-password', (event, user) => {
    event.returnValue = keytar.getPassword('ServiceName', user);
});

ipcMain.on('set-password', (event, user, pass) => {
    event.returnValue = keytar.replacePassword('ServiceName', user, pass);
});

然后从渲染器进程中,您可以调用

const password = ipcRenderer.sendSync('get-password', user);

或者

ipcRenderer.sendSync('set-password', user, pass);

ipcMain 文档:这里。ipcRenderer 文档:这里

于 2021-03-03T11:46:17.333 回答