最近、PloneサイトをPlone4.1.4からPlone4.2.4に移行しました。移行自体はエラーを報告しませんでした。しかし、ここ数日、非常に奇妙な行動の報告を受けました。特定のユーザーはログインできず、plone.session.tktauthのUnicodeDecodeErrorとcreateTicket関数(以下を参照)を受け取り、ログインフォームに送り返されました。これらのユーザーのいずれも、ユーザー名またはパスワードにutf-8文字を使用していませんでした。これは、これらすべての中で最も奇妙な部分でした。
調査の結果、plone.sessionはバージョン3.5.2であり、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)