0

我最近将一个 Plone 站点从 Plone 4.1.4 迁移到 Plone 4.2.4。迁移本身没有报告错误。然而,在过去的几天里,我们收到了关于非常奇怪的行为的报告。某些用户无法登录并在 plone.session.tktauth 和 createTicket 函数(见下文)中收到 UnicodeDecodeError 并被发送回登录表单。这些用户的用户名或密码中都没有 utf-8 字符,这是所有这一切中最奇怪的部分。

经过一番调查,我看到 plone.session 是 3.5.2 版本,并且有两行将编码设置为 None。在我之前的 3.5 版本中,createTicket 和 splitTicket 中的编码设置为 utf-8。通过将这些行更改为 utf-8 我解决了错误(到目前为止!):

def createTicket(secret, userid, tokens=(), user_data='', ip='0.0.0.0', timestamp=None, encoding='utf8', mod_auth_tkt=False):
...

def splitTicket(ticket, encoding='utf8'):
...

不知道其他人是否经历过这个或者这是否是一个错误,但我想我会把它放在那里。希望这可以帮助任何遭受同样问题的人。

最好的,帕特里克

原始错误:

Module ZPublisher.Publish, line 126, in publish
Module ZPublisher.mapply, line 77, in mapply
Module ZPublisher.Publish, line 46, in call_object
Module Products.CMFFormController.FSControllerPageTemplate, line 91, in __call__
Module Products.CMFFormController.BaseControllerPageTemplate, line 28, in _call
Module Products.CMFFormController.ControllerBase, line 231, in getNext
Module Products.CMFFormController.Actions.TraverseTo, line 38, in __call__
Module ZPublisher.mapply, line 77, in mapply
Module ZPublisher.Publish, line 46, in call_object
Module Products.CMFFormController.FSControllerPythonScript, line 105, in __call__
Module Products.CMFFormController.Script, line 145, in __call__
Module Products.CMFCore.FSPythonScript, line 127, in __call__
Module Shared.DC.Scripts.Bindings, line 322, in __call__
Module Shared.DC.Scripts.Bindings, line 359, in _bindAndExec
Module Products.PythonScripts.PythonScript, line 344, in _exec
Module script, line 29, in logged_in
<FSControllerPythonScript at /Plone/logged_in>
Line 29
Module Products.PlonePAS.tools.membership, line 624, in loginUser
Module Products.PlonePAS.plugins.cookie_handler, line 93, in login
Module Products.PluggableAuthService.PluggableAuthService, line 1140, in updateCredentials
Module plone.session.plugins.session, line 220, in updateCredentials
Module plone.session.plugins.session, line 140, in _setupSession
Module plone.session.tktauth, line 177, in createTicket

UnicodeDecodeError: 'ascii' codec can't decode byte 0xa8 in position 6: ordinal not in range(128) 
4

2 回答 2

1

这里已经有关于这个的讨论:https ://github.com/plone/plone.session/commit/0d4079c0e0ceff780ab10ce3206e99c59c4010a2#L1L200

于 2013-03-04T07:44:45.297 回答
0

建议的解决方案,其中 plone.session.tktauth 中的 encoding=None,设置为 utf8:

def createTicket(secret, userid, tokens=(), user_data='', ip='0.0.0.0', timestamp=None, encoding='utf8', mod_auth_tkt=False):
...

def splitTicket(ticket, encoding='utf8'):
于 2013-03-04T02:02:03.330 回答