Я создал простой перехватчик сервера, который извлекает пользователя на основе токена JWT.
Но теперь я хотел бы сделать его доступным для всех методов моих служб.
НаСейчас я использую декораторы.Но я бы не хотел украшать все методы.На всякий случай украшай только те, которые не нужны пользователю.
Кто-нибудь может подсказать мне?
вот мой код:
class AuthInterceptor(grpc.ServerInterceptor):
"""Authorization Interceptor"""
def __init__(self, loader):
self._loader = loader
def intercept_service(self, continuation, handler_call_details):
# Authenticate if we not requesting token.
if not handler_call_details.method.endswith('GetToken'):
# My Authentication class.
auth = EosJWTAuth()
# Authenticate using the headers tokens to get the user.
user = auth.authenticate(
dict(handler_call_details.invocation_metadata))[0]
# Do something here to pass the authenticated user to the functions.
cont = continuation(handler_call_details)
return cont
И я хотел бы, чтобы мои методы могли получить доступ к пользователю таким способом.
class UserService(BaseService, users_pb2_grpc.UserServicer):
"""User service."""
def get_age(self, request, context):
"""Get user's age"""
user = context.get_user()
# or user = context.user
# or user = self.user
# os user = request.get_user()
return pb.UserInfo(name=user.name, age=user.age)