如何以编程方式将OpenID用户添加到Plone站点

如何以编程方式将OpenID用户添加到Plone站点,plone,Plone,在某些OpenID用户首次登录我的Plone站点之前,我需要为他们提供角色(包括成员角色)、memberdata和用户文件夹。也就是说,我需要以编程方式将OpenID用户添加到我的Plone站点。portal_registration.addMember无法添加OpenID用户。openid有自己的PAS插件,它不创建成员对象。我该怎么做才能在setuphandler中复制?通常的方法是手动登录OpenID用户,然后在登录后添加角色、memberdata和共享。但是,该用户故事不是可编程复制的。

在某些OpenID用户首次登录我的Plone站点之前,我需要为他们提供角色(包括成员角色)、memberdata和用户文件夹。也就是说,我需要以编程方式将OpenID用户添加到我的Plone站点。portal_registration.addMember无法添加OpenID用户。openid有自己的PAS插件,它不创建成员对象。我该怎么做才能在setuphandler中复制?通常的方法是手动登录OpenID用户,然后在登录后添加角色、memberdata和共享。但是,该用户故事不是可编程复制的。

唯一重要的是为每个用户生成的用户id。应该可以预先使用与openid标识url匹配的用户id创建常规成员,将其分配给角色,然后使用openid(仅限)作为这些用户的替代身份验证方法


更新:正如Chris在下面评论的那样,不可能通过Plone UI添加URL作为id的用户,但必须通过ZMI(Zope管理界面)将其直接创建到PAS用户文件夹中。

假设我有一个带有预配置用户帐户的ServiceX(特定于应用程序的权限和适当的查看访问权限)。用户名/openid\u密钥是什么/我应该向用户发送什么?然后我将预配置的服务帐户链接到该OpenID帐户。说用户使用谷歌或雅虎OpenID提供商?OpenID提供者是否返回电子邮件地址以便我链接预配置的帐户?恐怕答案是否定的。Plone中当前默认的OpenID实现只是将OpenID标识url分配为用户ID。而且,该url可能不包含电子邮件地址,并且对于每个提供商都是不同的。为了支持这一点,应该升级plone.openid以支持openid属性交换扩展。我曾尝试从openid URL创建成员,但URL包含在userid中无效的字符。如问题中所述,portal_registration.addMember不会将URL作为用户ID。我感谢有人终于回答了。但两年前,当我在开发需要这个功能的应用程序时,没有找到答案,我放弃了使用plone.openid,现在从事另一份工作。这一切都没有意义,因为OpenID已经死了,我们使用的OpenID提供程序已经崩溃,即将到来的plone.login将支持OAuth。然而,如何将OAuth身份验证与成员对象联系起来则是另一回事。