Форум сайта python.su
в шаблонах
${h.secure_form(url('user_new'))}
генерирует _authentication_token.
в webhelpers.secure_form есть функция authentication_token, которая возвращает текущий token.
т.е. по идее надо сранивать пришедший token из request.POST и тот что выдает authentication_token().
как это лучше делать?
писать middleware?
или декоратор?
что-то странно что генерация token есть, а ни декораторов, ни миддлваре, ни впрочем инфы как это проверять нету.
может кто подскажет?
спасибо!
Офлайн
нашел декоратор проверяющий этот _authentication_token
from pylons.decorators.secure import authenticate_form
class UserController(BaseController):
def add(self):
return render('/user/add.mako')
@authenticate_form
@validate(schema=UserNewSchema(), form='add')
def save(self):
username = self.form_result
password = self.form_result
email = self.form_result
u = User()
u.username=username
u.password=password
u.email=email
Session.add(u)
Session.commit()
flash('User %s successfully saved!' % u.username)
redirect(url('user_view', user_id=u.id))
в итоге когда заходим на /user/add/ то token генерируется, но когда субмитим форму (с ошибками или незаполненную), то показываются ошибки, но token уже =''
в итоге когда засубмитить форму еще раз, то вываливается
403 Forbidden
Access was denied to this resource.
Cross-site request forgery detected, request denied. See http://en.wikipedia.org/wiki/Cross-site_request_forgery for more information.
Может кто подскажет как правильно это делать?
только начал изучать pylons, в джанге токен проверяется через middleware,а тут пока не понятно как правильно делать :)
или забить на token и генерить не h.secure_form, а обычную h.form ?
Заранее спасибо за любую помощь!
Офлайн
ой…
кажись разобрался сам.
порядок в данном случае имеет значение :)
нужно сначала добавлять валидационный декоратор, и только в конце проверяющий token
@validate(schema=UserNewSchema(), form='add')
@authenticate_form
def save(self):
….
надеюсь эта инфа кому-то пригодится кто начинает изучать pylons.
Офлайн