1.实现H5 的账号密码 登录和注册功能
2.登录和注册代码
controller
@Post('/h5Login', { summary: 'H5登录' })
async LoginByH5(@Body() body) {
const res: any = await this.businessLoginService.H5Login(body);
return this.ok(res);
}
@Post('/h5Register', { summary: 'H5注册' })
async RegisterByH5(@Body() body) {
const res: any = await this.businessLoginService.H5Register(body);
return this.ok(res);
}
service
// H5 登录
async H5Login(login) {
if (!login.password || !login.phone) {
throw new CoolCommException('参数不能为空~');
}
const user = await this.businessStudentEntity.findOneBy({
phone: login?.phone,
password: md5(login?.password),
});
if (!user) {
// if (user.password !== md5(login.password)) {
// // 校验用户状态及密码
// throw new CoolCommException('账户或密码不正确~');
// }
// if (!user.phone) {
// throw new CoolCommException('账户不存在~');
// }
throw new CoolCommException('账户或密码不正确~');
} else {
// 生成token
const { expire, refreshExpire } = this.coolConfig.jwt.token;
const result = {
expire,
token: await this.generateToken(user, expire),
refreshExpire,
refreshToken: await this.generateToken(user, refreshExpire, true),
};
// 将用户相关信息保存到缓存
await this.cacheManager.set(`business:token:${user.id}`, result.token, {
ttl: expire,
});
await this.cacheManager.set(
`business:token:refresh:${user.id}`,
result.token,
{ ttl: refreshExpire }
);
return { token: result.token, user };
}
}
//H5注册
async H5Register(register) {
if (
!register.phone ||
!register.password ||
!register.confirmPassword ||
!register.yzmCode ||
!register.registerCode
) {
throw new CoolCommException('参数不能为空~');
}
const phoneRegex = /^1[3-9]\d{9}$/; // 手机号码的正则表达式
if (!phoneRegex.test(register.phone)) {
throw new CoolCommException('手机号码格式不正确~');
}
if (register.password !== register.confirmPassword) {
throw new CoolCommException('两次密码不一致');
}
const inviteCode = await this.businessUserEntity.findOneBy({
inviteCode: register.registerCode,
});
if (!inviteCode) {
throw new CoolCommException('导师不存在~');
}
const user = await this.businessStudentEntity.findOneBy({
phone: register?.phone,
});
if (user) {
throw new CoolCommException('账户已存在~');
}
await this.businessStudentEntity.save({
phone: register.phone,
password: md5(register.password),
membershipLevel: 0,
balance: 0,
userId: inviteCode.id,
nickName: `蹲票用户${register.phone}`,
});
return 1;
}