possible fix to issue 1688, support for multiple forms with same formname in different browser pages
This commit is contained in:
@@ -1 +1 @@
|
|||||||
Version 2.6.4-stable+timestamp.2013.09.26.07.55.44
|
Version 2.6.4-stable+timestamp.2013.09.26.11.24.52
|
||||||
|
|||||||
+9
-3
@@ -2017,10 +2017,14 @@ class FORM(DIV):
|
|||||||
changed = False
|
changed = False
|
||||||
request_vars = self.request_vars
|
request_vars = self.request_vars
|
||||||
if session is not None:
|
if session is not None:
|
||||||
formkey = session.get('_formkey[%s]' % formname, None)
|
formkey = request_vars._formkey
|
||||||
|
keyname = '_formkey[%s]' % formname
|
||||||
|
formkeys = session.get(keyname, [])
|
||||||
# check if user tampering with form and void CSRF
|
# check if user tampering with form and void CSRF
|
||||||
if not formkey or formkey != request_vars._formkey:
|
if not formkeys or formkey not in formkeys:
|
||||||
status = False
|
status = False
|
||||||
|
else:
|
||||||
|
session[keyname].remove(formkey)
|
||||||
if formname != request_vars._formname:
|
if formname != request_vars._formname:
|
||||||
status = False
|
status = False
|
||||||
if status and session:
|
if status and session:
|
||||||
@@ -2056,7 +2060,9 @@ class FORM(DIV):
|
|||||||
formkey = self.record_hash
|
formkey = self.record_hash
|
||||||
else:
|
else:
|
||||||
formkey = web2py_uuid()
|
formkey = web2py_uuid()
|
||||||
self.formkey = session['_formkey[%s]' % formname] = formkey
|
self.formkey = formkey
|
||||||
|
keyname = '_formkey[%s]' % formname
|
||||||
|
session[keyname] = session.get(keyname,[])[-9:] + [formkey]
|
||||||
if status and not keepvalues:
|
if status and not keepvalues:
|
||||||
self._traverse(False, hideerror)
|
self._traverse(False, hideerror)
|
||||||
self.accepted = status
|
self.accepted = status
|
||||||
|
|||||||
Reference in New Issue
Block a user