我正在使用Amazon Cognito为使用Javascript SDK的网站进行用户登录,该网站使用本地存储来保存用户的凭据,这些凭据用于自动登录等内容。从计算机上的本地文件运行时,这不起作用。
在本地运行网站时,是否可以指示Javascript SDK通过其他方式而不是本地存储来保存用户凭据?
我已经看到了更改存储对象的引用,但我找不到有关如何实际实现自定义存储解决方案的任何示例。 https://github.com/aws/amazon-cognito-identity-js/pull/363
答案 0 :(得分:3)
如pull request you linked所示,您现在可以指定要使用的池的Storage对象。根据MDN,有两个内置的Storage对象:localStorage和sessionStorage。您可以按原样使用sessionStorage(我还没试过)。它将在页面重新加载后继续存在,但在页面/选项卡关闭时会被清除。新标签会获得一个新的sessionStorage对象。
let pool = new CognitoUserPool({
UserPoolId,
ClientId,
storage: window.sessionStorage
});
如果这不起作用,您需要构建一个实现Storage API的对象。它非常简单,不需要做太多事情。共有5种方法,大多数方法可以使用简单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
这是一个在Storage中实现memory API的NPM包。缺点是页面刷新会清除它。
从source code可以看出它不是很复杂。
在我看来,更好的选择是使用一个非常简单的服务器,如serve或Web Server for Chrome来通过http提供文件,以便localStorage(和其他许多部分工作正如你所料。