Environment
- Environment type: Standalone Plone instance on a VMware Player VM
- Plone version: 5.2.2
- Python version: 3.8.3
- Guest OS: CentOS 8 Stream
- VM hardware: 8 cores, 8 GB RAM, 5.8 GB free space
- Physical OS: Debian 10 Buster, AMD64
- Physical machine build: AMD FX 8350, 32 GB RAM, Nvidia Geforce GTX 1070, Asus M5A99X EVO R2.0 motherboard, 1 TB SSD
I am trying to expose my Plone session data to a web page I have loaded into my Zope instance. My goal is to be able to tell from the page I loaded on Zope if my user has logged into Plone, and be able to access my user information from that web page.
For good measure, I also have successfully integrated an ApacheDS LDAP server into both my Zope instance and my Plone site, by adding pas.plugins.ldap on buildout.cfg in the eggs
and zcml
parts, running Buildout, enabling the addon on my Plone website configuration, adding an LDAP Plugin on /acl_users in my Zope instance, and entering the same configuration to connect to my LDAP server on the LDAP plugin and Plone's "LDAP/AD support" control panel. Both my Plone site and my Zope instance can successfully see the same users I registered on both my LDAP server.
So, after piecing together many different loose documentation pages, the official readme for plone.session, a Stack Overflow message that explains some details about plone.session for use against other web servers and several other resources, I have gathered that I'm apparently supposed to use the plone.session add-on. I added it to the eggs
and zcml
parts of my buildout.cfg, ran Buildout, went to my Zope backend, navigated to /acl_users, and added a Plone Session Plugin.
However, when I try to open my Plone session plugin's configuration page, I get this error:
We’re sorry, but there seems to be an error…
ComponentLookupError
Traceback (innermost last):
Module ZPublisher.WSGIPublisher, line 162, in transaction_pubevents
Module ZPublisher.WSGIPublisher, line 359, in publish_module
Module ZPublisher.WSGIPublisher, line 254, in publish
Module ZPublisher.mapply, line 85, in mapply
Module ZPublisher.WSGIPublisher, line 63, in call_object
Module Shared.DC.Scripts.Bindings, line 335, in __call__
Module Shared.DC.Scripts.Bindings, line 372, in _bindAndExec
Module Products.PageTemplates.PageTemplateFile, line 145, in _exec
Module Products.PageTemplates.PageTemplate, line 83, in pt_render
Module zope.pagetemplate.pagetemplate, line 133, in pt_render
Module Products.PageTemplates.engine, line 367, in __call__
Module z3c.pt.pagetemplate, line 176, in render
Module chameleon.zpt.template, line 307, in render
Module chameleon.template, line 214, in render
Module chameleon.utils, line 75, in raise_with_traceback
Module chameleon.template, line 192, in render
Module 6fe10e1a75d4c66706c7b810b966b53b, line 389, in render
Module zope.tales.expressions, line 250, in __call__
Module Products.PageTemplates.Expressions, line 196, in _eval
Module Products.PageTemplates.Expressions, line 126, in render
Module plone.protect.authenticator, line 115, in authenticator
Module plone.protect.authenticator, line 99, in createToken
Module plone.protect.authenticator, line 51, in _getKeyring
Module zope.component._api, line 165, in getUtility
zope.interface.interfaces.ComponentLookupError: zope.interface.interfaces.ComponentLookupError: (<InterfaceClass plone.keyring.interfaces.IKeyManager>, '')
- Expression: "context/@@authenticator/authenticator"
- Filename: manage_secret
- Location: (line 50: col 34)
- Arguments: template: <PageTemplateFile at /acl_users/session_plone/secret>
here: <SessionPlugin at /acl_users/session_plone>
context: <SessionPlugin at /acl_users/session_plone>
container: <SessionPlugin at /acl_users/session_plone>
nothing: None
options: {'args': ()}
root: <Application at >
request: <WSGIRequest, URL=http://localhost:39080/acl_users/session_plone/manage_secret>
modules: <Products.PageTemplates.ZRPythonExpr._SecureModuleImporter object at 0x7f9a0abe15e0>
user: <PropertiedUser 'admin'>
default: <DEFAULT>
repeat: <Products.PageTemplates.engine.RepeatDictWrapper object at 0x7f99f4152700>
loop: {}
target_language: None
translate: <function BaseTemplate.render.<locals>.translate at 0x7f99f4479a60>
attrs: {}
I am honestly at a loss as to how to proceed. Am I missing something? Am I supposed to use another mechanism? Am I supposed to use a separate web server to handle authentication?