Skip to content

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

Alt text

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.

Alt text

Request akan seperti di bawah ini, jika

  • kombinasi token refresh_token dan id tidak ada di tabel user
  • Token sudah expired

Alt text