Я начинаю работать с Nest JS, и я создаю SignIn и SignUp с JWT Passport. Я стека с пользователем, когда зарегистрироваться, чтобы получить токен. Если логин то нормально. Для JWT. Я также использую паспортный пакет. Я создал это в соответствии с одним руководством, но я не знаю, как получить JWT, когда пользователь регистрируется без входа в систему.
auth.service.ts
async signUp(authCredentialsDto: RegisterUserDto): Promise<any> {
return await this.userRepository.signUp(authCredentialsDto);
}
async signIn(user: LoginUserDto): Promise<{ accessToken: string}> {
const getUser = await this.userRepository.validateUserPassword(user);
if(!getUser) {
throw new HttpException('User not exist',
HttpStatus.BAD_REQUEST);
}
const accessToken = await this.jwtService.sign(getUser);
return { accessToken };
}
auth.controller.ts
@Post("/signup")
signUp(@Body(ValidationPipe) authCredentialsDto: RegisterUserDto) {
return this.authService.signUp(authCredentialsDto);
}
@Post("/signin")
signIn(
@Body(ValidationPipe) loginUserDto: LoginUserDto
): Promise<{ accessToken: string }> {
return this.authService.signIn(loginUserDto);
}
user.repository.ts
@EntityRepository(User)
export class UserRepository extends Repository<User> {
async signUp(authCredentialsDto: RegisterUserDto): Promise<any> {
const { firstName, lastName, email, password } = authCredentialsDto;
const user = new User();
user.firstName = firstName;
user.lastName = lastName;
user.email = email;
user.salt = await bcrypt.genSalt();
user.password = await this.hashPassword(password, user.salt);
try {
await user.save();
} catch (error) {
if(error.errno==1062) {
throw new HttpException('User Already exists',
HttpStatus.BAD_REQUEST);
} else {
throw new InternalServerErrorException();
}
}
}
async validateUserPassword(loginUserDto: LoginUserDto): Promise<any> {
const { email, password } = loginUserDto;
const user = await this.findOne({ email });
if (email && await user.validatePassword(password)) {
return {
id: user.id,
email: user.email
};
} else {
return null;
}
}
// hash password
private async hashPassword(password: string, salt: string): Promise<string> {
return bcrypt.hash(password, salt);
}