首先,爲什麼不重新組織您的網站將所有這些需要身份驗證的頁面放到您可以使用Zope權限保護的位置?自定義(本地)工作流可以在逐個狀態和逐個位置的基礎上應用權限,從而使用Zope自己的自動身份驗證框架。如果您不使用工作流程,則自定義類型仍然可以應用URL空間中由其下的任何內容獲取的權限。
你可以從你的special_template中創建一個方法(一個Zope3視圖,一個皮膚圖層中的Python腳本,一個獲取上下文中的內容類的方法,一個外部方法,按照最佳實踐的大致順序)宏通過tal:define語句。我將這裏的輸出分配給一個虛擬變量,因爲你不關心這個,我們將使用它來產生副作用。下面的例子假設你已經走了Z3的視圖方式:
<body tal:define="dummy context/@@redirect_if_anonymous">
這將實例化一個名爲redirect_if_anonymous
註冊的視圖。在視圖中,您可以使用標準Zope API方法或Cookie測試來測試您的Web訪問者是否已通過身份驗證,具體取決於您的應用程序。這是一個標準的API示例,它會引發Unauthorized強制登錄。
from Products.Five import BrowserView
from AccessControl import getSecurityManager, Unauthorized
from AccessControl.SpecialUsers import nobody
class RedirectAnonymous(BrowserView):
def __call__(self):
sm = getSecurityManager()
user = sm.getUser()
if user is None or user is nobody:
raise Unauthorized
如果你想要的是一個重定向到另一個位置,只需使用Response.Redirect():
url = self.request['URL0'] + '/login.html'
self.request.response.redirect(url)
如果你想測試餅乾第一,餅乾請求變量的一部分:
if 'mycookie' not in self.request.cookies:
self.request.response.redirect(url)
有一件事我忘了說是這樣的(不要拍我要說明明顯) - 這僅需要發生匿名用戶,所以任何身份驗證的應用將不再需要重新登錄 – chrism 2009-08-03 15:10:28