安装依赖
pnpm install crypto --save
1.编写加密和解密
import { Injectable } from "@nestjs/common";
import { ConfigService } from "@nestjs/config";
import * as crypto from "crypto";
@Injectable()
export class CryptoService {
constructor(
private configService: ConfigService,
) {}
//加密
async careatePassword(password: string): Promise<string> {
const hmac = crypto.createHmac('sha256', this.configService.get('crypto').secret);
hmac.update(password);
return hmac.digest('hex');
}
//验证密码
async checkPassword(password: string, hash_password: string): Promise<boolean> {
//先对需要验证的密码进行加密
password = await this.careatePassword(password);
return password === hash_password;
}
}
2. 在auth.module.ts中引入
@Module({
//导入进来UserModule
imports: [],
exports: [],
controllers: [AuthController],
providers: [
CryptoService
],
})
export class AuthModule {}
3. 在auth.service.ts中, 登录时验证密码。
@Injectable()
export class AuthService {
constructor(
private cryptoService: CryptoService
) {}
//登录
async manageLogin(username: string, password: string) {
let checkPassword = await this.cryptoService.checkPassword(password, user.password);
if(!checkPassword) throw new HttpException('密码错误', 404);
}
}
4. 在注册时,对前端传回来的密码进行加密
//对密码进行加密
let hash_password = await this.cryptoService.careatePassword(password);