在Plone中使用用户名和密码登录

时间:2013-01-25 14:58:40

标签: plone zope

在给定的BrowserView中,我需要以成员身份登录。此视图实际上仅是成员的Web服务。我从请求XML中提取用户名和密码,我需要作为此成员进行身份验证。

到目前为止,我找到了方法:

self.portal.acl_users.authenticate(user, password, self.portal.REQUEST)

但是此方法仅返回成员对象(如果用户和密码正确)。它不执行身份验证。我通过执行以下方式确认:

from AccessControl import getSecurityManager
getSecurityManager().getUser() #Get the current authenticated user
>>>Anonymous User

我想知道如何在此BrowserView中作为此成员进行身份验证。

谢谢

1 个答案:

答案 0 :(得分:2)

我会在身份验证后为这样的作业创建一个新的安全管理器:

from AccessControl.SecurityManagement import newSecurityManager
from AccessControl.SecurityManagement import getSecurityManager

uf = self.portal.acl_users
if not uf.authenticate(user, password, self.request):
    # Unauthorized, better raise a 401 here.

smanager = getSecurityManager()
user = uf.getUserById(user)
if not hasattr(user, 'aq_base'):
    user = user.__of__(uf) # acquisition wrap the user
newSecurityManager(self.request, user)

# Do anything the new user should be able to do

setSecurityManager(smanager)