Initial commit: ERP system with advance verification fixes
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
import { Injectable, UnauthorizedException } from '@nestjs/common';
|
||||
import { JwtService } from '@nestjs/jwt';
|
||||
import { UsersService } from '../users/users.service';
|
||||
import * as bcrypt from 'bcryptjs';
|
||||
|
||||
@Injectable()
|
||||
export class AuthService {
|
||||
constructor(
|
||||
private readonly usersService: UsersService,
|
||||
private readonly jwtService: JwtService,
|
||||
) {}
|
||||
|
||||
async register(username: string, password: string, name: string, email: string, roleId: string) {
|
||||
// 检查用户名是否已存在
|
||||
const existingUser = await this.usersService.findByUsername(username);
|
||||
if (existingUser) {
|
||||
throw new Error('Username already exists');
|
||||
}
|
||||
|
||||
// 检查邮箱是否已存在
|
||||
const existingEmail = await this.usersService.findByEmail(email);
|
||||
if (existingEmail) {
|
||||
throw new Error('Email already exists');
|
||||
}
|
||||
|
||||
// 哈希密码
|
||||
const hashedPassword = await bcrypt.hash(password, 10);
|
||||
|
||||
// 创建用户
|
||||
const user = await this.usersService.create({
|
||||
username,
|
||||
password: hashedPassword,
|
||||
name,
|
||||
email,
|
||||
roleId,
|
||||
});
|
||||
|
||||
return user;
|
||||
}
|
||||
|
||||
async login(username: string, password: string) {
|
||||
// 查找用户
|
||||
console.log('Login attempt for user:', username);
|
||||
const user = await this.usersService.findByUsername(username);
|
||||
console.log('Found user:', user);
|
||||
if (!user) {
|
||||
throw new UnauthorizedException('Invalid credentials');
|
||||
}
|
||||
|
||||
// 验证密码
|
||||
const isPasswordValid = await bcrypt.compare(password, user.password);
|
||||
console.log('Password valid:', isPasswordValid);
|
||||
if (!isPasswordValid) {
|
||||
throw new UnauthorizedException('Invalid credentials');
|
||||
}
|
||||
|
||||
// 生成JWT token
|
||||
const payload = { sub: user.id, username: user.username, role: user.role.name };
|
||||
const token = this.jwtService.sign(payload);
|
||||
|
||||
const response = {
|
||||
access_token: token,
|
||||
user: {
|
||||
id: user.id,
|
||||
username: user.username,
|
||||
name: user.name,
|
||||
email: user.email,
|
||||
role: user.role.name,
|
||||
},
|
||||
};
|
||||
console.log('Login response:', response);
|
||||
return response;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user