当前位置: 首页 > 知识库问答 >
问题:

如何在提交新数据之前清除离子存储

赏阳嘉
2023-03-14

我正在用inappbrowser中的webapp创建一个ionic应用程序。我制作了一个单独的ionic登录表单,将凭证发送到webapp的登录表单,这样我就可以登录webapp了。

以下是我当前代码的流程

如果用户在存储中保存了凭据,请打开web应用程序并自动登录用户;否则,请留在登录页面上。

但问题是,如果每次用户重新登录时我都清除存储,它就会返回一个空值。

另外,我不太确定我的代码是否是一个好的实践,另一种方式是什么?

userInput: string = "";
passInput: string = "";
userKey:string = 'username';
passKey:string = 'password';

constructor(
  private platform: Platform,
  private iab: InAppBrowser,
  private storage: Storage
) { this.init(); }

init() {
  let promiseList = [];

  Promise.all([
    this.storage.get(this.userKey).then((username) => {
      console.log('Retrieved username is', username);
      promiseList.push(username)
    }),
    this.storage.get(this.passKey).then((password) => {
      console.log('Retrieved password is', password);
      promiseList.push(password)
    })
  ]).then(() => {
    console.log('promiseList', promiseList)
    if (validated) { this.openWebApp(promiseList) }
    else { //remain in the login page }
  })
}

login() {
  // this.storage.clear()
  this.storage.set(this.userKey, this.userInput)
  this.storage.set(this.passKey, this.passInput)
  this.init();
}

openWebApp(credentials) {
  console.log('credentials', credentials, credentials[0], credentials[1])
  this.platform.ready().then(() => {
    const browser = this.iab.create('https://www.mywebapp.com/login', '_blank', {location:'no', footer:'no', zoom:'no', usewkwebview:'yes', toolbar:'no'});

    browser.on('loadstop').subscribe(event => {
    browser.show();

    browser.executeScript({
        code: `document.getElementById("usernameInput").value=${credentials[0]} document.getElementById("passwordInput").value=${credentials[1]} document.getElementById("submitBtn").click()`
    })
  });
});

以下是我想要达到的目标:

如果用户使用新凭据再次登录,请清除旧凭据并保存新凭据。

共有1个答案

司寇书
2023-03-14

离子存储函数通常会返回Promises……因此,您需要等待这些Promises解决,然后再做其他事情……例如:

async login() {
  await this.storage.clear();
  await this.storage.set(this.userKey, this.userInput);
  await this.storage.set(this.passKey, this.passInput);
  this.init();
}
 类似资料:
  • 我已在登录时在本地存储中设置了身份验证令牌,并在注销时将其清除。注销后,如果用户尝试再次登录,则从缓存中获取旧的身份验证令牌,而不是新设置的值。如何在清除本地存储时清除缓存。我在应用程序中使用angular 2。 登录: 注销:

  • 我尝试在片段子类中使用onSaveInstanceState(Bundle outState)方法保存数据。 解释:我创建了一个类FragmentA,它扩展了这个类中的Fragment。我有一个变量名count,当我单击按钮时,count的值发生了变化(最初count=0)。我想保存count的值,即使方向发生了变化(纵向到横向,反之亦然)。我的MainActivity类动态加载片段。 我的代码:

  • 问题内容: 我正在使用Ajax根据某些ID从服务器检索数据,以执行自动建议功能。但是,当我提交表单并更新数据库时,“自动建议”字段应该不再包含此ID的任何内容,但仍会从其缓存中检索数据。有谁知道如何清除缓存并在每次按下按钮时发出Ajax发送请求以从服务器获取最新数据?请帮助我整个星期都坚持不下去,找不到解决方案。 例如:当ID字段为00001时,自动建议字段将为1,2,3。在我提交表单并更新数据库

  • 我无法使spring-Cloud-stream-binder-kafka适用于以下用例: 启动@事务(Rest控制器)DB更新/插入发送Kafka消息 在事务提交之前,使用者(使用@EnableBinding和@StreamListener配置)能够读取记录。此使用者已配置了read\u提交的隔离级别。 我不确定这是一个问题还是我这边的任何配置。 尝试配置bean ChainedTransacti

  • 本文向大家介绍vue.js前后端数据交互之提交数据操作详解,包括了vue.js前后端数据交互之提交数据操作详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了vue.js前后端数据交互之提交数据操作。分享给大家供大家参考,具体如下: 前端小白刚开始做页面的时候,我们的前端页面中经常会用到表单,所以学会提交表单也是一个基本技能,其实用ajax就能实现,但他的原始语法有点。。。额 。。。复杂,

  • 我正在使用Spring boot framework(V2.0.2)构建一个REST服务,其中我有在数据库上运行的集成测试。我搜索了很多关于在测试前清理数据库的文章,但不幸的是,我发现它们要么效率低,要么是一个黑客,不适合Spring Boot。你能不能,请忍耐一下,给我一个解决这个问题的好办法? 理想情况下,我认为不应该在每次测试之前清除数据库,而是在一组测试之前清除数据库,比如suite或每个