Как очистить ионное хранилище перед отправкой новых данных - PullRequest
0 голосов
/ 15 февраля 2019

Я создаю ионное приложение с веб-приложением внутри приложения.Я создал отдельную форму ионного входа, которая отправляет учетные данные в форму входа в веб-приложение, чтобы я мог войти в веб-приложение.

Вот поток моего текущего кода:

Если у пользователя естьсохранить учетные данные в хранилище, открыть веб-приложение и автоматически войти в систему пользователя;остальное, оставайтесь на странице входа.

Но проблема в том, что если я очищаю хранилище каждый раз, когда у пользователя новый логин, он возвращает нулевое значение.

Кроме того, яне очень уверен, что мой код - хорошая практика, какой еще способ для этого?

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 Ответ

0 голосов
/ 15 февраля 2019

Функции Ionic Storage обычно возвращают Обещания ... Поэтому вам нужно дождаться разрешения этих Обещаний, прежде чем делать другие вещи ... Например:

async login() {
  await this.storage.clear();
  await this.storage.set(this.userKey, this.userInput);
  await this.storage.set(this.passKey, this.passInput);
  this.init();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...