This commit is contained in:
tonyrewin 2023-02-20 19:09:55 +03:00
parent 9fb6c72dbe
commit a8ad52caba
2 changed files with 27 additions and 36 deletions

View File

@ -12,7 +12,7 @@ from orm.user import User, Role
from settings import SESSION_TOKEN_HEADER from settings import SESSION_TOKEN_HEADER
from auth.tokenstorage import SessionToken from auth.tokenstorage import SessionToken
from base.exceptions import InvalidToken, OperationNotAllowed from base.exceptions import OperationNotAllowed
class JWTAuthenticate(AuthenticationBackend): class JWTAuthenticate(AuthenticationBackend):
@ -30,44 +30,34 @@ class JWTAuthenticate(AuthenticationBackend):
user_id=None user_id=None
) )
try: if len(token.split('.')) > 1:
if len(token.split('.')) > 1: payload = await SessionToken.verify(token)
payload = await SessionToken.verify(token) user = None
if payload is None: with local_session() as session:
return AuthCredentials(scopes=[]), AuthUser(user_id=None) try:
user = None user = (
with local_session() as session: session.query(User).options(
try: joinedload(User.roles).options(joinedload(Role.permissions)),
user = ( joinedload(User.ratings)
session.query(User).options( ).filter(
joinedload(User.roles).options(joinedload(Role.permissions)), User.id == payload.user_id
joinedload(User.ratings) ).one()
).filter( )
User.id == payload.user_id
).one()
)
except exc.NoResultFound:
user = None
if not user: scopes = {} # TODO: integrate await user.get_permission()
return AuthCredentials(scopes=[]), AuthUser(user_id=None)
scopes = {} # await user.get_permission() return (
AuthCredentials(
user_id=payload.user_id,
scopes=scopes,
logged_in=True
),
AuthUser(user_id=user.id),
)
except exc.NoResultFound:
pass
return ( return AuthCredentials(scopes=[], error_message=str('Invalid token')), AuthUser(user_id=None)
AuthCredentials(
user_id=payload.user_id,
scopes=scopes,
logged_in=True
),
AuthUser(user_id=user.id),
)
else:
InvalidToken("please try again")
except Exception as e:
print("[auth.authenticate] session token verify error")
print(e)
return AuthCredentials(scopes=[], error_message=str(e)), AuthUser(user_id=None)
def login_required(func): def login_required(func):

View File

@ -23,6 +23,7 @@ class JWTCodec:
@staticmethod @staticmethod
def decode(token: str, verify_exp: bool = True) -> TokenPayload: def decode(token: str, verify_exp: bool = True) -> TokenPayload:
r = None r = None
payload = None
try: try:
payload = jwt.decode( payload = jwt.decode(
token, token,