通过电子邮件登录+;设置自己的登录名+;pas.plugins.sqlalchemy=更改地址失败

通过电子邮件登录+;设置自己的登录名+;pas.plugins.sqlalchemy=更改地址失败,sqlalchemy,plone,Sqlalchemy,Plone,我正在一个全新的Plone 4.1安装中使用pas.plugins.sqlalchemy。 我将Plone设置为将电子邮件地址作为登录名 没关系,但是如果我想通过个人信息面板更改电子邮件地址,我会得到一个错误: 你不是Plone的成员。您可能已在根用户文件夹中注册。如果这是意外情况,请通知管理员 如果我要更改另一个个人数据字段,我不会获得错误 问题似乎是Products.CMFPlone(utils.py)的set_own_login_name函数。 这里的细节 谢谢 Vito您是否以Zope根

我正在一个全新的Plone 4.1安装中使用pas.plugins.sqlalchemy。 我将Plone设置为将电子邮件地址作为登录名

没关系,但是如果我想通过个人信息面板更改电子邮件地址,我会得到一个错误: 你不是Plone的成员。您可能已在根用户文件夹中注册。如果这是意外情况,请通知管理员

如果我要更改另一个个人数据字段,我不会获得错误

问题似乎是Products.CMFPlone(utils.py)的set_own_login_name函数。 这里的细节

谢谢
Vito

您是否以Zope根目录中定义的管理员用户身份登录

如果是这种情况,那么看看是否可以通过转到Zope根目录中的acl_用户并在那里更改登录名来更改登录名

否则,请暂时关闭emaillogin,更改电子邮件,然后重新打开emaillogin

请注意,在引发此KeyError之前的utils.py代码中有一条注释(由我提供),它指出了一个我并不真正喜欢的可能解决方案:

# PLIP9214: For a user in the zope root we could do something like this:
# userfolder = member.getUser().__parent__.users
# userfolder.updateUser(member.id, loginname)
# But it is probably best not to touch root zope users.

嗨,毛里兹,我是一个简单的用户(通过pas sql进行身份验证)。emaillogin代码试图在这里做的是更改您的登录名。为此,它将获取所有IUserManagement插件,并对每个插件调用
userfolder.updateUser(member.id,loginname)
,直到找到一个成功的插件。我猜要么pas sql插件没有注册为IUserManagement插件,要么调用由于未知原因失败。如果您熟悉python调试器,我建议您在set_own_login_name函数中添加一个pdb.set_trace(),看看是否可以从那里获得更多信息。Pas.Plugins.SqlAlchemy缺少“updateUser”方法。我将尝试修补并通知插件的开发团队