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
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
Seleteh berhasil , silakan coba login ulang dengan password baru