Торнадо декоратор - PullRequest
       31

Торнадо декоратор

0 голосов
/ 27 апреля 2019

У меня есть мой ионный интерфейс, который добавляет токен на предъявителя в каждый запрос.Мой сервер Tornado уже настроен для CORS.Проблема в том, что когда я активирую свой декоратор, чтобы проверить, имеет ли этот запрос заголовок «Авторизация», я не понимаю, почему этот заголовок исчез.Там нет заголовка «Авторизация».Но если я отключу этот заголовок, все в порядке, и торнадо покажет мне этот заголовок.

Есть идеи?

Я переопределяю метод RequestHandler set_default_headers

С этими заголовками:

 set_default_headers(self):
        self.set_header("Access-Control-Allow-Origin", "*")
        self.set_header("Access-Control-Allow-Headers", "authorization")
        self.set_header('Access-Control-Allow-Methods', 'POST, GET, OPTIONS')

Декоратор

class EvaluationHandler(RequestHandler)

def get(self):
 print(handler.request.headers) <--- Good headers

MyТокен-декоратор, чтобы проверить это:

def jwtauth(handler_class):
    def wrap_execute(handler_execute):
        def require_auth(handler, kwargs):
            auth = handler.request.headers.get('Authorization', None)
            print(handler.request.headers) <---- Bad Headers
            print(auth)
            if auth:
                if not loginRepository.validToken(auth):
                    return_header_error(handler)
            else:
                return_header_error(handler)
                handler._transforms = []
                handler.write(MISSING_AUTHORIZATION_KEY)
                handler.finish()

            return True

        def _execute(self, transforms, *args, **kwargs):
            try:
                require_auth(self, kwargs)
            except Exception:
                return False

            return handler_execute(self, transforms, *args, **kwargs)

        return _execute

    handler_class._execute = wrap_execute(handler_class._execute)
    return handler_class

РЕДАКТИРОВАТЬ: проблема может быть в том, что пользовательский декоратор принимает собственную конфигурацию заголовка, но я все равно не знаю, как это сделать

1 Ответ

0 голосов
/ 28 апреля 2019

Если единственной функцией декоратора является проверка на наличие определенных заголовков, лучший способ сделать это - метод prepare, чтобы упростить задачу.

EvaluationHandler(RequestHandler):
    def prepare(self):
        auth = self.request.headers.get('Authorization', None)

        if not auth:
            ...
            return self.finish()
...