在给定的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中作为此成员进行身份验证。
谢谢
答案 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)