Nest Js Auth получает токен JWT при регистрации - PullRequest
0 голосов
/ 24 марта 2020

Я начинаю работать с 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);
  }
...