1

在给定的 BrowserView 中,我需要以会员身份登录。这个视图实际上是一个仅供会员使用的网络服务。我从请求 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 中以该成员身份进行身份验证。

谢谢

4

1 回答 1

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)
于 2013-01-25T15:16:54.447 回答