2

csrf_ignoreDjango のデコレータのようなものを探しています。

サブスクライバーを介して、通常の方法で csrf 検証を定義しました。

@subscriber(NewRequest)
def csrf_validation(event):
    ...

次に、アップロード用の POST 画像を受け入れる別のビューがあります。

@view_config(route_name="upload_images", request_method="POST", renderer="json")
def upload_images(request):
    ...

しかし、ビューのcsrf検証を無視するにはどうすればよいupload_imagesですか? それが役立つ場合、私は Pyramid 1.3 を使用しています。

4

1 に答える 1

3

Pyramid 1.4 はそれ自体のcheck_csrf述語をサポートしていview_configます。その前に、チェックを実行してビューに適用する独自のカスタム述語を実装する必要があります。

サブNewRequestスクライバーは要求パイプラインの非常に早い段階で発生し、この時点では多くのプロパティを利用できません。たとえば、どのルートが一致するかはまだ計算されていません。したがって、実際にできることはif not request.path_info.startswith('/upload_image_path'):.

サブスクライバーまでチェックを延期できます。ContextFoundその場合、チェックできますif request.matched_route.name ~= 'upload_images'

ただし、最良の選択肢は、csrf チェックを個々のビューに明示的に適用することです。これは、カスタム述語を使用して行うことができます。

def csrf_check(context, request):
    # do check, return True if passes, or raise some exception if fails

@view_config(..., custom_predicates=[csrf_check])
def not_upload_images(request):
    # ....
于 2012-11-09T15:13:49.857 に答える