2016-10-23 15 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メソッドが呼び出されていません。ところで、デコレータを書くのは私の初めてのことなので、私は完全に間違っているかもしれません。任意のお返事ありがとう

+1

あなたは 'wrapper'の中で決して' f'を呼び出すことはありません。いつあなたはそれが起こることを期待しましたか? – jonrsharpe

答えて

1

実際にラッパー内の関数を呼び出す必要があります。

+0

ああ、メソッドが呼び出される前にデコレータが呼び出されたと思った。私は自分でメソッドを呼び出さなければならないのか分からなかった。ありがとう – Juggernaut

関連する問題