Skip to content

Commit 1307b95

Browse files
committed
fix exception handler
1 parent 0f304d2 commit 1307b95

File tree

2 files changed

+42
-9
lines changed

2 files changed

+42
-9
lines changed

fastapi_jwt_auth/auth_jwt.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@
99
CSRFError,
1010
JWTDecodeError,
1111
RevokedTokenError,
12-
MissingTokenRequired
12+
MissingTokenError,
13+
AccessTokenRequired,
14+
RefreshTokenRequired,
15+
FreshTokenRequired
1316
)
1417

1518
class AuthJWT(AuthConfig):
@@ -551,7 +554,7 @@ def verify_and_get_jwt_in_cookies(
551554
csrf_token = request.headers.get(self._refresh_csrf_header_name)
552555

553556
if not cookie:
554-
raise MissingTokenRequired(status_code=401,message="Missing cookie {}".format(cookie_key))
557+
raise MissingTokenError(status_code=401,message="Missing cookie {}".format(cookie_key))
555558

556559
if self._cookie_csrf_protect and not csrf_token:
557560
if isinstance(request, WebSocket) or request.method in self._csrf_methods:
@@ -579,7 +582,7 @@ def verify_jwt_optional_in_request(self,token: str) -> None:
579582
if token: self._verifying_token(token)
580583

581584
if token and self.get_raw_jwt(token)['type'] != 'access':
582-
raise MissingTokenRequired(status_code=422,message="Only access tokens are allowed")
585+
raise AccessTokenRequired(status_code=422,message="Only access tokens are allowed")
583586

584587
def verify_jwt_in_request(
585588
self,
@@ -603,20 +606,23 @@ def verify_jwt_in_request(
603606

604607
if not token:
605608
if token_from == 'headers':
606-
raise MissingTokenRequired(status_code=401,message="Missing {} Header".format(self._header_name))
609+
raise MissingTokenError(status_code=401,message="Missing {} Header".format(self._header_name))
607610
if token_from == 'websocket':
608-
raise MissingTokenRequired(status_code=1008,message="Missing token from Query or Path")
611+
raise MissingTokenError(status_code=1008,message="Missing token from Query or Path")
609612

610613
# verify jwt
611614
issuer = self._decode_issuer if type_token == 'access' else None
612615
self._verifying_token(token,issuer)
613616

614617
if self.get_raw_jwt(token)['type'] != type_token:
615618
msg = "Only {} tokens are allowed".format(type_token)
616-
raise MissingTokenRequired(status_code=422,message=msg)
619+
if type_token == 'access':
620+
raise AccessTokenRequired(status_code=422,message=msg)
621+
if type_token == 'refresh':
622+
raise RefreshTokenRequired(status_code=422,message=msg)
617623

618624
if fresh and not self.get_raw_jwt(token)['fresh']:
619-
raise MissingTokenRequired(status_code=401,message="Fresh token required")
625+
raise FreshTokenRequired(status_code=401,message="Fresh token required")
620626

621627
def _verifying_token(self,encoded_token: str, issuer: Optional[str] = None) -> None:
622628
"""

fastapi_jwt_auth/exceptions.py

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ def __init__(self,status_code: int, message: str):
2828
self.status_code = status_code
2929
self.message = message
3030

31-
class MissingTokenRequired(AuthJWTException):
31+
class MissingTokenError(AuthJWTException):
3232
"""
33-
Error raised when token not found or invalid type
33+
Error raised when token not found
3434
"""
3535
def __init__(self,status_code: int, message: str):
3636
self.status_code = status_code
@@ -43,3 +43,30 @@ class RevokedTokenError(AuthJWTException):
4343
def __init__(self,status_code: int, message: str):
4444
self.status_code = status_code
4545
self.message = message
46+
47+
class AccessTokenRequired(AuthJWTException):
48+
"""
49+
Error raised when a valid, non-access JWT attempt to access an endpoint
50+
protected by jwt_required, jwt_optional, fresh_jwt_required
51+
"""
52+
def __init__(self,status_code: int, message: str):
53+
self.status_code = status_code
54+
self.message = message
55+
56+
class RefreshTokenRequired(AuthJWTException):
57+
"""
58+
Error raised when a valid, non-refresh JWT attempt to access an endpoint
59+
protected by jwt_refresh_token_required
60+
"""
61+
def __init__(self,status_code: int, message: str):
62+
self.status_code = status_code
63+
self.message = message
64+
65+
class FreshTokenRequired(AuthJWTException):
66+
"""
67+
Error raised when a valid, non-fresh JWT attempt to access an endpoint
68+
protected by fresh_jwt_required
69+
"""
70+
def __init__(self,status_code: int, message: str):
71+
self.status_code = status_code
72+
self.message = message

0 commit comments

Comments
 (0)