diff --git a/lib/jwt/encode.rb b/lib/jwt/encode.rb index 2bc23963..b20852eb 100644 --- a/lib/jwt/encode.rb +++ b/lib/jwt/encode.rb @@ -27,7 +27,7 @@ def encoded_header(algorithm, header_fields) end def encoded_payload(payload) - raise InvalidPayload, 'exp claim must be an integer' if payload && payload['exp'] && payload['exp'].is_a?(Time) + raise InvalidPayload, 'exp claim must be an integer' if payload && payload['exp'] && !payload['exp'].is_a?(Integer) Encode.base64url_encode(JSON.generate(payload)) end diff --git a/spec/jwt_spec.rb b/spec/jwt_spec.rb index 2db731da..62ebf5c5 100644 --- a/spec/jwt_spec.rb +++ b/spec/jwt_spec.rb @@ -60,6 +60,14 @@ JWT.encode payload, nil, alg end.to raise_error JWT::InvalidPayload end + + it 'should display a better error message if payload exp is not an Integer' do + payload['exp'] = Time.now.to_i.to_s + + expect do + JWT.encode payload, nil, alg + end.to raise_error JWT::InvalidPayload + end end %w(HS256 HS512256 HS384 HS512).each do |alg|