在没有本地存储的情况下保存Amazon Cognito用户凭据

时间:2018-02-05 21:18:41

标签: javascript amazon-cognito

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

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

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

1 个答案:

答案 0 :(得分:3)

回答您的确切问题

pull request you linked所示,您现在可以指定要使用的池的Storage对象。根据MDN,有两个内置的Storage对象:localStoragesessionStorage。您可以按原样使用sessionStorage(我还没试过)。它将在页面重新加载后继续存在,但在页面/选项卡关闭时会被清除。新标签会获得一个新的sessionStorage对象。

let pool = new CognitoUserPool({ 
  UserPoolId, 
  ClientId, 
  storage: window.sessionStorage 
});

如果这不起作用,您需要构建一个实现Storage API的对象。它非常简单,不需要做太多事情。共有5种方法,大多数方法可以使用简单Object

以1:1进行映射
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

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

source code可以看出它不是很复杂。

然而

在我看来,更好的选择是使用一个非常简单的服务器,如serveWeb Server for Chrome来通过http提供文件,以便localStorage(和其他许多部分工作正如你所料。