Найти - Пользователи
Полная версия: как проверять authentication_token из webhelpers.secure_form
Начало » Pyramid / Pylons / TurboGears » как проверять authentication_token из webhelpers.secure_form
1
LestatCheb
в шаблонах
${h.secure_form(url('user_new'))}
генерирует _authentication_token.

в webhelpers.secure_form есть функция authentication_token, которая возвращает текущий token.

т.е. по идее надо сранивать пришедший token из request.POST и тот что выдает authentication_token().

как это лучше делать?
писать middleware?
или декоратор?
что-то странно что генерация token есть, а ни декораторов, ни миддлваре, ни впрочем инфы как это проверять нету.

может кто подскажет?


спасибо!
LestatCheb
нашел декоратор проверяющий этот _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 ?


Заранее спасибо за любую помощь!
LestatCheb
ой…
кажись разобрался сам.

порядок в данном случае имеет значение :)
нужно сначала добавлять валидационный декоратор, и только в конце проверяющий token

@validate(schema=UserNewSchema(), form='add')
@authenticate_form
def save(self):
….

надеюсь эта инфа кому-то пригодится кто начинает изучать pylons.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB