21 lines
No EOL
674 B
Ruby
21 lines
No EOL
674 B
Ruby
class JsonWebToken
|
|
# secret to encode and decode token
|
|
HMAC_SECRET = Rails.application.secrets.secret_key_base
|
|
|
|
def self.encode(payload, exp = 24.hours.from_now)
|
|
# set expiry to 24 hours from creation time
|
|
payload[:exp] = exp.to_i
|
|
# sign token with application secret
|
|
JWT.encode(payload, HMAC_SECRET)
|
|
end
|
|
|
|
def self.decode(token)
|
|
# get payload; first index in decoded Array
|
|
body = JWT.decode(token, HMAC_SECRET)[0]
|
|
HashWithIndifferentAccess.new body
|
|
# rescue from all decode errors
|
|
rescue JWT::DecodeError => e
|
|
# raise custom error to be handled by custom handler
|
|
raise ExceptionHandler::InvalidToken, e.message
|
|
end
|
|
end |