2016-10-23 3 views
0

Я хочу проверить, проверен ли пользователь до того, как он сможет получить доступ к этому методу, поэтому я написал декоратор с именем 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 не называется. BTW, его мой первый раз написание декоратора, чтобы я мог быть совершенно неправ. Спасибо за любые ответы

+1

Вы никогда не называете 'f' внутри' wrapper', поэтому, когда вы ожидали, что это произойдет? – jonrsharpe

ответ

1

Вам нужно на самом деле вызвать функцию внутри вашей обертки.

f(*args, **kwargs) 
+0

О, я думал, что декораторы вызываются до вызова метода. Я не знал, что должен сам вызвать этот метод. благодаря – Juggernaut

Смежные вопросы