【问题标题】:Tornado decorator cors headersTornado 装饰器 cors 标头
【发布时间】:2019-09-16 16:52:30
【问题描述】:

我有我的 ionic 作为前端,它在每个请求中附加一个承载令牌。我的 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

我的令牌装饰器来检查它:

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

编辑:问题可能是自定义装饰器采用的是自己的标头配置,但我不知道该怎么做

【问题讨论】:

    标签: rest ionic-framework cors tornado


    【解决方案1】:

    如果装饰器的唯一功能是检查某些标头,那么更好的方法是使用prepare 方法以使事情变得更容易。

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

    【讨论】:

    • 但是如何使用自定义装饰器来做到这一点?在这种情况下,装饰器真的很有用。
    • @VictorVallecillo 我真的不能说:我从来没有在我的课程中使用过装饰器。创建基类几乎消除了对装饰器的需求。你能举一些例子,比如它会有什么用处吗?
    猜你喜欢
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    • 2018-04-11
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 2021-01-19
    • 2013-08-24
    相关资源
    最近更新 更多