我正在使用浏览器内部的webapp创建一个离子应用程序。我制作了另一个离子登录表单,将凭据发送到Webapp的登录表单,以便我可以登录Webapp。
这是我当前代码的流程:
如果用户在存储中具有保存的凭据,请打开webapp并自动登录该用户;否则,请保留在登录页面上。
但是问题是,如果我每次用户有新的登录名时都清除存储,它将返回一个空值。
此外,我不太确定自己的代码是否是一种好的做法,还有什么其他方法呢?
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()`
})
});
});
这是我想要实现的目标:
如果用户使用新凭据再次登录,请清除旧凭据并保存新凭据。
答案 0 :(得分:1)
离子存储功能通常会返回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();
}