我想在他/她可以访问该方法之前检查用户是否已经过身份验证,因此我编写了一个名为authorize
的装饰器,但只执行了装饰器代码,即使用户已通过身份验证,方法也是没跟它打电话。
这是方法和装饰器代码:
@authorize
def post(self, **kw):
# store data in database after authentication done using @authorize
def authorize(f):
def wrapper(*args, **kwargs):
secret_key = config.get('auth_secret_key')
auth_message = config.get('auth_message')
if 'HTTP_TOKEN' not in request.environ:
abort(401, detail='Authentication failed', passthrough='json')
gibberish = request.environ['HTTP_TOKEN']
if triple_des(secret_key).decrypt(gibberish, padmode=2).decode() != auth_message:
abort(401, detail='Authentication failed', passthrough='json')
return wrapper
如果用户遇到身份验证问题,则会引发401
并中止请求,但如果他已通过身份验证,则不会调用post
方法。顺便说一句,这是我第一次写装饰,所以我可能完全错了。谢谢你的回答
答案 0 :(得分:1)
您需要在包装器中实际调用该函数。
f(*args, **kwargs)