すべての投稿とxhrリクエストに対してcsrf_tokenを渡し、セッションcsrfトークンに対してトークンを検証したいと思います。それらが一致しない場合、私は401を投げます。
ピラミッドのNewResponseサブスクライバーを使用して、リクエストを検査し、リクエストパラメーターのcsrfトークンをセッションのトークンと照合して検証しました。検証は機能しますが、それでもビューを呼び出すため、defは正常に機能しません。
これを行うための適切な方法に関する提案はありますか?
@subscriber(NewResponse)
def new_response(event):
"""Check the csrf_token if the user is authenticated and the
request is a post or xhr req.
"""
request = event.request
response = event.response
user = getattr(request, 'user', None)
# For now all xhr request are csrf protected.
if (user and user.is_authenticated()) and \
(request.method == "POST" or request.is_xhr) and \
(not request.params.get('csrf_token') or \
request.params.get('csrf_token') != unicode(request.session.get_csrf_token())):
response.status = '401 Unauthorized'
response.app_iter = []