@romain has also hit by the 'Invalid authentication token' error when login with unicode in login/password, which reminder me the Invalid authentication token discussion that i forgot
After some search, i think here is what happens:
-
when user click login,
modifyRequestofCookieCrumbleris called, which generate ac value, then callsetAuthCookieto set cookie in browser even the login/password are not correct -
then
BaseRequestofZopeis called, which callidentifyofAccessControl -
in
identify, it try to calldecode, but since there hasunicode, it fail with exception:
'ascii' codec can't decode byte 0xc3 in position 0
which is catched and raise again with BadRequest 'Invalid authentication token'
-
since there has exception, the
post traversal hooksofBaseRequestis not called anymore, in our login case,logged_inis not called, which is used to removed cookie if anonymous -
in the end, the wrong cookie is set in browser, user is not able to login anymore since login page always shows
BadRequest 'Invalid authentication token'
i don't know what's the correct way to fix, i already tried the original CookieCrumbler instead of our patch, it has the same error
Maybe we should patch also BaseRequest.py or AccessControl.py
i already tried with @romain that patch AccessControl.py, it seems works
--- a/src/AccessControl/userfolder.py
+++ b/src/AccessControl/userfolder.py
@@ -118,7 +118,7 @@ class BasicUserFolder(Implicit, Persistent, RoleManager):
name, password = decodebytes(auth.split(b' ')[-1]) \
.decode().split(':', 1)
except BaseException:
- raise BadRequest('Invalid authentication token')
+ return None, None
return name, password
else:
return None, None
@jerome @vpelletier what do you think ?