-1

我目前有一个授权标头:

def authorize(allowed_groups=None, debug=False):
    # Do your auth here...
    headers = cherrypy.request.headers
    return 
    if 'consumer_key' in headers:
        if check_consumer_key(headers['consumer_key']):
            if 'access_token' in headers:
                cherryPy.accept = check_access_token['access_token']
    else:
        cherrypy.accept = False

我在这里使用它:

@cherrypy.tools.authorize()
def GET(self, id=None):
    #return the order list for this account type
    if cherrypy.accept:
        print "Accepted"
    user = User()
    usermodel = user.get_all()
    return json.dumps(usermodel, cls=AlchemyEncoder)

所以,与其做一个 cherrpy.accept = True,当授权不正确时,如何在装饰器本身中返回一个错误页面?

4

1 回答 1

1

您可以只制作另一个装饰器,如果授权成功,它只会调用原始函数,否则只会显示错误页面。这样可以避免更改其他装饰器。

def rejectNotAuthorized (f):
    def inner ():
         if cherrypy.accept:
             f()
         else:
             displayErrorPage()
    return inner

@cherrypy.tools.authorize()
@rejectNotAuthorized
def GET(self, id=None):
    pass

当然,您也可以将其集成到原始装饰器中。您只需要确保返回一个函数,根据身份验证结果,该函数要么运行真实函数,要么显示错误。

于 2013-11-06T11:59:44.150 回答