无需本地存储即可保存Amazon Cognito用户凭据

Ber*_*lue 6 javascript amazon-cognito

我正在使用Amazon Cognito来登录具有Javascript SDK的网站,该网站使用本地存储来保存用户的凭据,这些凭据用于自动登录等内容.从计算机上的本地文件运行时,这不起作用.

在本地运行网站时,是否可以指示Javascript SDK通过其他方式而不是本地存储来保存用户凭据?

我已经看到了更改存储对象的引用,但我找不到任何关于如何实际实现自定义存储解决方案的示例. https://github.com/aws/amazon-cognito-identity-js/pull/363

tsd*_*sey 4

回答你的确切问题

如链接到的拉取请求中所示,您现在可以指定要使用的池的存储对象。根据 MDN,有两个内置存储对象:localStoragesessionStorage。您也许可以按原样使用sessionStorage (我还没有尝试过)。它将在页面重新加载后继续存在,但在页面/选项卡关闭时被清除。新选项卡获得新的sessionStorage对象。

let pool = new CognitoUserPool({ 
  UserPoolId, 
  ClientId, 
  storage: window.sessionStorage 
});
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,您需要构建一个实现存储API 的对象。这非常简单,不需要做太多事情。总共有 5 种方法,大多数都可以通过简单的 1:1 映射Object

Storage.key(int n); // Return the Nth key
Storage.getItem(string key) // return the value for given key
Storage.setItem(string key, string value) // store a value at key
Storage.removeItem(string key) // remove the value for key
Storage.clear() // delete all values
Run Code Online (Sandbox Code Playgroud)

这是一个在内存中实现存储API 的 NPM 包。缺点是页面刷新会清除它。

从源代码可以看出,它并不是很复杂。

然而

在我看来,更好的选择是使用一个非常简单的服务器,例如serveChrome的Web服务器来通过http提供文件,以便localStorage(以及页面的许多其他部分)按您的预期工作。