Использование пилонов проверяет и аутентификат_форм декоратор

StackOverflow https://stackoverflow.com/questions/2981555

Вопрос

Декораторы Validation и Authenticate_form, кажется, не играют красиво вместе. Это мой шаблон:

<html>
<title>Test</title>
<body>
${h.secure_form('/meow/do_post')}
<input type="text" name="dummy">
<form:error name="dummy"><br>
<input type="submit" name="doit" value="Do It">
${h.end_form()}
</body>
</html>

И это контроллер:

import logging

from pylons import request, response, session, tmpl_context as c, url
from pylons.controllers.util import abort, redirect

from ocust.lib.base import BaseController, render
import formencode
import formencode.validators
from formencode import htmlfill
from pylons.decorators import validate
from pylons.decorators.secure import authenticate_form

class MeowForm(formencode.Schema):
    allow_extra_fields = True
    dummy = formencode.validators.NotEmpty()

class MeowController(BaseController):

    def index(self): 
        return render('/index.mako')

    @authenticate_form
    @validate(schema=MeowForm(), form='index')
    def do_post(self):
        return 'posted OK'

Если проверка не удается, форма повторно Рендерруется с использованием htmlfill.render декоратором @Validate, но это вытягивает токен аутентификации, поэтому обнаруженная ошибка 403 CSRF отображается на следующий раз, когда форма отправляется.

Токен аутентификации, по -видимому, разделен, потому что @Authenticate_form удаляет токен аутентификации из request.post.

Если это используется вместо этого:

@validate(schema=MeowForm(), form='index', force_defaults=False)

это работает нормально. Есть ли что -нибудь плохое, что может произойти, если FIRCE_DEFAULTS будет установлен на ложь? Документы для HTMLFILL, кажется, рекомендуют его установить на TRUE, когда по умолчанию «являются результатом подчинения формы».

Это было полезно?

Решение

@validate(schema=MeowForm(), form='index')
@authenticate_form
def do_post(self):

Вам нужно изменить порядок декораторов, аутентификация декоратор должен быть последним

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top