[authMiddleware][BREAKING] read token from "JWTToken" cookie
This commit is contained in:
parent
c9ecc1f8d2
commit
bbb027cd0d
|
@ -14,6 +14,7 @@ from os import environ
|
||||||
import typing
|
import typing
|
||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
|
|
||||||
|
from http.cookies import SimpleCookie
|
||||||
import jwt
|
import jwt
|
||||||
from starlette.authentication import (
|
from starlette.authentication import (
|
||||||
AuthenticationBackend, AuthenticationError, BaseUser, AuthCredentials,
|
AuthenticationBackend, AuthenticationError, BaseUser, AuthCredentials,
|
||||||
|
@ -34,6 +35,15 @@ except FileNotFoundError:
|
||||||
logger.error('Could not import SECRET variable from conf module,'\
|
logger.error('Could not import SECRET variable from conf module,'\
|
||||||
' using HALFAPI_SECRET environment variable')
|
' using HALFAPI_SECRET environment variable')
|
||||||
|
|
||||||
|
def cookies_from_scope(scope):
|
||||||
|
cookie = dict(scope.get("headers") or {}).get(b"cookie")
|
||||||
|
if not cookie:
|
||||||
|
return {}
|
||||||
|
|
||||||
|
simple_cookie = SimpleCookie()
|
||||||
|
simple_cookie.load(cookie.decode("utf8"))
|
||||||
|
return {key: morsel.value for key, morsel in simple_cookie.items()}
|
||||||
|
|
||||||
class JWTAuthenticationBackend(AuthenticationBackend):
|
class JWTAuthenticationBackend(AuthenticationBackend):
|
||||||
def __init__(self, secret_key: str = SECRET,
|
def __init__(self, secret_key: str = SECRET,
|
||||||
algorithm: str = 'HS256', prefix: str = 'JWT'):
|
algorithm: str = 'HS256', prefix: str = 'JWT'):
|
||||||
|
@ -53,7 +63,8 @@ class JWTAuthenticationBackend(AuthenticationBackend):
|
||||||
) -> typing.Optional[typing.Tuple['AuthCredentials', 'BaseUser']]:
|
) -> typing.Optional[typing.Tuple['AuthCredentials', 'BaseUser']]:
|
||||||
|
|
||||||
|
|
||||||
token = conn.headers.get('Authorization')
|
token = cookies_from_scope(conn.scope).get('JWTToken')
|
||||||
|
|
||||||
is_check_call = 'check' in conn.query_params
|
is_check_call = 'check' in conn.query_params
|
||||||
is_fake_user_id = is_check_call and 'user_id' in conn.query_params
|
is_fake_user_id = is_check_call and 'user_id' in conn.query_params
|
||||||
PRODUCTION = conn.scope['app'].debug == False
|
PRODUCTION = conn.scope['app'].debug == False
|
||||||
|
|
Loading…
Reference in New Issue