4. Refresh Token
Membuat Service Refresh Token
app/auth/auth.service.ts
async refreshToken(id: number, token: string): Promise<ResponseSuccess> {
const checkUserExists = await this.authRepository.findOne({
where: {
id: id,
refresh_token: token,
},
select: {
id: true,
nama: true,
email: true,
password: true,
refresh_token: true,
},
});
console.log('user', checkUserExists);
if (checkUserExists === null) {
throw new UnauthorizedException();
}
const jwtPayload: jwtPayload = {
id: checkUserExists.id,
nama: checkUserExists.nama,
email: checkUserExists.email,
};
const access_token = await this.generateJWT(
jwtPayload,
'1d',
jwt_config.access_token_secret,
);
const refresh_token = await this.generateJWT(
jwtPayload,
'7d',
jwt_config.refresh_token_secret,
);
await this.authRepository.save({
refresh_token: refresh_token,
id: checkUserExists.id,
});
return this._success('Success', {
...checkUserExists,
access_token: access_token,
refresh_token: refresh_token,
});
}
Pada kode di atas , kita akan mencari data user yang memilki kombinasi id dan refresh_token yang dikirimkan saat request. Jika tidak ditemukan maka akan request akan Unauthorized
sedangkan jika ditemukan maka akan dibuatkan access token dan refresh token yang baru. Hal ini sama seperti saat kita login. Implentasi pada client akan kita bahas pada materi Frontend
Membuat Controller Refresh Token
app/auth/auth.controller.ts
@UseGuards(JwtGuardRefreshToken)
@Get('refresh-token')
async refreshToken(@Req() req) {
const token = req.headers.authorization.split(' ')[1];
const id = req.headers.id;
return this.authService.refreshToken(+id, token);
}
Pengujian pada Postman
Pertama login terlebih dahulu untuk mendapatkan refresh token
Kedua salin refresh_token dan id yang didapatkan dan paste-kan pada header Authorization
untuk refresh token dan header id
untuk id yang akan dibawa saat request ke api refresh-roken. Jika berhasil maka akan seperti gambar di bawah ini.
Request akan seperti di bawah ini, jika
- kombinasi token refresh_token dan id tidak ada di tabel user
- Token sudah expired