Skip to content

5. Fitur Reset Password

Sebelumnya kita sudah berhasil mengirimkan link lupa password melalui email. kemudian user akan mengganti password menggunakan link tersebut. Kemudian pada materi ini kita akan membahas bagaimana membuat endpoint untuk lupa password

1. Membuat DTO dan validasi untuk reset password

Membuat DTO dan validasi untuk reset password

auth.dto.ts
export class ResetPasswordDto {
  @IsString()
  @MinLength(8)
  new_password: string;
}

2. Membuat Service pada auth service

auth.service.ts
async resetPassword(
    user_id: number,
    token: string,
    payload: ResetPasswordDto,
  ): Promise<ResponseSuccess> {
    const userToken = await this.resetPasswordRepository.findOne({    //cek apakah user_id dan token yang sah pada tabel reset password
      where: {
        token: token,
        user: {
          id: user_id,
        },
      },
    });

    if (!userToken) {
      throw new HttpException(
        'Token tidak valid',
        HttpStatus.UNPROCESSABLE_ENTITY,  // jika tidak sah , berikan pesan token tidak valid
      );
    }

    payload.new_password = await hash(payload.new_password, 12); //hash password
    await this.authRepository.save({  // ubah password lama dengan password baru
      password: payload.new_password,
      id: user_id,
    });
    await this.resetPasswordRepository.delete({ // hapus semua token pada tabel reset password yang mempunyai user_id yang dikirim, agar tidak bisa digunakan kembali
      user: {
        id: user_id,
      },
    });

    return this._success('Reset Passwod Berhasil, Silahkan login ulang');
  }

3. Membuat endpoint reset password

auth.controller.ts
// const link = `http://localhost:5002/auth/reset-password/${user.id}/${token}`;

@Post('reset-password/:user_id/:token')  // url yang dibuat pada endpont harus sama dengan ketika kita membuat link pada service forgotPassword
  async resetPassword(
    @Param('user_id') user_id: string,
    @Param('token') token: string,
    @Body() payload: ResetPasswordDto,
  ) {
    return this.authService.resetPassword(+user_id, token, payload);
  }

3. Pengujian pada Postman

Copy link yang didapat pada email dan paste pada postman

Alt text

payload
{
    "new_password" : "123456789"
}

Seleteh berhasil , silakan coba login ulang dengan password baru

Alt text