class JWTBase
Public Class Methods
new(secret_key, access_exp, refresh_exp, algorithm = 'HS256')
click to toggle source
# File lib/jwt_base.rb, line 8 def initialize(secret_key, access_exp, refresh_exp, algorithm = 'HS256') @secret_key = secret_key @access_exp = access_exp @refresh_exp = refresh_exp @algorithm = algorithm raise Time::TypeError unless @access_exp.class == ActiveSupport::Duration raise Time::TypeError unless @refresh_exp.class == ActiveSupport::Duration end
Public Instance Methods
create_access_token(payload, header = { typ: :JWT })
click to toggle source
# File lib/jwt_base.rb, line 18 def create_access_token(payload, header = { typ: :JWT }) raise JWT::EncodeError unless payload[:exp].nil? || payload[:type].nil? payload[:exp] = (Time.now + @access_exp).to_i payload[:type] = :access JWT.encode(payload, @secret_key, @algorithm, header) end
create_refresh_token(payload, header = { typ: :JWT })
click to toggle source
# File lib/jwt_base.rb, line 26 def create_refresh_token(payload, header = { typ: :JWT }) raise JWT::EncodeError unless payload[:exp].nil? || payload[:type].nil? payload[:exp] = (Time.now + @refresh_exp).to_i payload[:type] = :refresh JWT.encode(payload, @secret_key, @algorithm, header) end
jwt_required(token)
click to toggle source
# File lib/jwt_base.rb, line 42 def jwt_required(token) payload = token_required(token) return { status: payload[:error] } if payload[:error] return { status: :forbidden } unless payload['type'] == 'access' payload end
refresh_token_required(token)
click to toggle source
# File lib/jwt_base.rb, line 50 def refresh_token_required(token) payload = token_required(token) return { status: payload[:error] } if payload[:error] return { status: :forbidden } unless payload['type'] == 'refresh' payload end
token_required(token)
click to toggle source
# File lib/jwt_base.rb, line 34 def token_required(token) payload = JWT.decode(token, @secret_key, @algorithm)[0] rescue JWT::DecodeError || NoMethodError || JWT::ExpiredSignature { error: :unauthorized } else payload end