Module: Philiprehberger::JwtKit::TokenPair

Defined in:
lib/philiprehberger/jwt_kit/token_pair.rb

Overview

Generates and refreshes access/refresh token pairs.

Class Method Summary collapse

Class Method Details

.generate(payload, config) ⇒ Array<String>

Generates an access token and refresh token pair.

Parameters:

  • payload (Hash)

    custom claims to include in both tokens

  • config (Configuration)

    JWT configuration

Returns:

  • (Array<String>)

    ‘[access_token, refresh_token]`



14
15
16
17
18
19
20
21
22
23
24
# File 'lib/philiprehberger/jwt_kit/token_pair.rb', line 14

def generate(payload, config)
  access_token = Encoder.encode(payload, config)

  refresh_payload = payload.merge('type' => 'refresh')
  original_expiration = config.expiration
  config.expiration = config.refresh_expiration
  refresh_token = Encoder.encode(refresh_payload, config)
  config.expiration = original_expiration

  [access_token, refresh_token]
end

.refresh(refresh_token, config) ⇒ String

Refreshes an access token using a valid refresh token.

Parameters:

  • refresh_token (String)

    a valid refresh token

  • config (Configuration)

    JWT configuration

Returns:

  • (String)

    new access token

Raises:



32
33
34
35
36
37
38
# File 'lib/philiprehberger/jwt_kit/token_pair.rb', line 32

def refresh(refresh_token, config)
  payload = Decoder.decode(refresh_token, config)
  raise InvalidToken, 'Token is not a refresh token' unless payload['type'] == 'refresh'

  new_payload = payload.except('exp', 'nbf', 'iat', 'jti', 'iss', 'aud', 'type')
  Encoder.encode(new_payload, config)
end