Я использую Plone 5 со скриптом Python для изменения каталога. Во время этого процесса я получил ошибку защиты CSRF. В Plone docs я нашел следующее решение:
authenticator = context.restrictedTraverse("@@authenticator")
url = url + "?_authenticator=" + authenticator.token()
state.set(..., next_action='redirect_to:string:%s' % url)
Выполнение этого кода приводит к этому:
Traceback (innermost last):
Module ZPublisher.Publish, line 138, in publish
Module ZPublisher.mapply, line 77, in mapply
Module ZPublisher.Publish, line 48, in call_object
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 19, in my_script
- <PythonScript at /path/to/my_script used for /path/library>
- Line 19
Module plone.protect.authenticator, line 104, in token
Module plone.protect.authenticator, line 95, in createToken
Module plone.protect.authenticator, line 51, in _getKeyring
Module zope.component._api, line 169, in getUtility
ComponentLookupError: (<InterfaceClass plone.keyring.interfaces.IKeyManager>, '')
Что пошло не так?