@@ -9,9 +9,6 @@ module Tokenable
99 module Authable
1010 extend ActiveSupport ::Concern
1111
12- included do
13- end
14-
1512 def user_signed_in?
1613 current_user . present?
1714 end
@@ -23,13 +20,23 @@ def current_user
2320 end
2421
2522 def require_tokenable_user!
26- raise Tokenable ::Unauthorized . new ( 'User not found in JWT token' ) unless jwt_user_id
27- raise Tokenable ::Unauthorized . new ( 'User is not signed in' ) unless user_signed_in?
28- raise Tokenable ::Unauthorized . new ( 'Token verifier is invalid' ) if user_class . included_modules . include? ( Tokenable :: Verifier ) && ! current_user . valid_verifier? ( jwt_verifier )
23+ raise Tokenable ::Unauthorized , 'User not found in JWT token' unless jwt_user_id
24+ raise Tokenable ::Unauthorized , 'User is not signed in' unless user_signed_in?
25+ raise Tokenable ::Unauthorized , 'Token verifier is invalid' unless valid_token?
2926 end
3027
3128 private
3229
30+ def verifier_enabled?
31+ user_class . included_modules . include? ( Tokenable ::Verifier )
32+ end
33+
34+ def valid_token?
35+ return true unless verifier_enabled?
36+
37+ current_user . valid_verifier? ( jwt_verifier )
38+ end
39+
3340 def user_class
3441 Tokenable ::Config . user_class
3542 end
@@ -42,16 +49,12 @@ def token_from_user(user)
4249 jwt_data = {
4350 data : {
4451 user_id : user . id ,
45- }
52+ } ,
4653 }
4754
48- if jwt_expiry_time
49- jwt_data [ :exp ] = jwt_expiry_time
50- end
55+ jwt_data [ :exp ] = jwt_expiry_time if jwt_expiry_time
5156
52- if user_class . included_modules . include? ( Tokenable ::Verifier )
53- jwt_data [ :data ] [ :verifier ] = user . current_verifier
54- end
57+ jwt_data [ :data ] [ :verifier ] = user . current_verifier if verifier_enabled?
5558
5659 JWT . encode ( jwt_data , jwt_secret , 'HS256' )
5760 end
@@ -65,19 +68,19 @@ def jwt_verifier
6568 end
6669
6770 def jwt
68- raise Tokenable ::Unauthorized . new ( 'Bearer token not provided' ) unless token_from_header . present?
71+ raise Tokenable ::Unauthorized , 'Bearer token not provided' unless token_from_header . present?
6972
7073 @jwt ||= JWT . decode ( token_from_header , jwt_secret , true , { algorithm : 'HS256' } ) . first . to_h
7174 rescue JWT ::ExpiredSignature
72- raise Tokenable ::Unauthorized . new ( 'Token has expired' )
75+ raise Tokenable ::Unauthorized , 'Token has expired'
7376 rescue JWT ::VerificationError
74- raise Tokenable ::Unauthorized . new ( 'The tokenable secret used in this token does not match the one supplied in Tokenable::Config.secret' )
77+ raise Tokenable ::Unauthorized , 'The tokenable secret used in this token does not match the one supplied in Tokenable::Config.secret'
7578 rescue JWT ::DecodeError
76- raise Tokenable ::Unauthorized . new ( 'JWT exception thrown' )
79+ raise Tokenable ::Unauthorized , 'JWT exception thrown'
7780 end
7881
7982 def jwt_expiry_time
80- Tokenable ::Config . lifespan
83+ Tokenable ::Config . lifespan ? Tokenable :: Config . lifespan . from_now . to_i : nil
8184 end
8285
8386 def jwt_secret
0 commit comments