Angular基础认证:注册功能代码错误排查请求
我帮你仔细过了一遍这段注册相关的代码,发现了几个关键问题:
Storage存储与读取的key完全不匹配
在doRegister()里你用this.storage.set(this.username, postParams),把用户信息存在了当前输入的用户名作为key的位置,但在auth()方法里你却用this.storage.get('username')去读取一个固定key为username的值——这两个key完全对不上,根本没法正确判断用户名是否已存在。用户名重复校验逻辑彻底颠倒
你的auth()方法里写的是if(this.username == username)就提示注册失败,但这里的username是从storage读出来的(而且还是错的key),正确逻辑应该是:如果storage里已经存在当前输入的用户名,才提示注册失败;反之才成功。现在的逻辑会导致完全相反的结果。用户数据存储方式不合理
现在你是把单个用户信息用用户名作为key存在storage里,但这种方式很难管理多个用户。更合理的做法应该是把所有用户存在一个数组里,用比如users作为统一的key,注册时先读取整个用户数组,检查是否有重复用户名,再把新用户push进去存回去。错误处理不全面
auth()方法里没有处理storage.get()可能出现的错误情况,如果读取storage失败,你的代码会直接忽略这个异常,可能导致奇怪的行为。注册成功后的用户体验缺失
注册成功后除了弹提示,通常应该清空表单、跳转到登录页之类的,但你的代码里没有这部分逻辑,用户操作起来会很别扭。
给你一个修正后的简单示例参考:
// 检查用户名是否存在 async checkUsernameExists(): Promise<boolean> { try { const users = await this.storage.get('users') || []; return users.some(user => user.username === this.username); } catch (error) { console.error('读取用户数据失败:', error); return false; } } // 注册方法 async doRegister() { const isExists = await this.checkUsernameExists(); if (isExists) { this.showAlertRegisterFailed(); return; } const postParams = { nama: this.nama, email: this.email, username: this.username, password: this.password }; try { const users = await this.storage.get('users') || []; users.push(postParams); await this.storage.set('users', users); this.showAlertRegisterSuccess(); // 这里可以添加清空表单、跳转登录页的逻辑 } catch (error) { console.error('注册存储失败:', error); this.showAlertRegisterFailed(); } }
内容的提问来源于stack exchange,提问作者Kevin Cornelius

