まず、Zopeのアクセス許可で保護できる場所に認証が必要なこれらすべてのページを配置するようにサイトを再構築しないでください。カスタム(ローカル)ワークフローは、Zope自身の自動認証フレームワークを使用して、州ごとおよび場所ごとに権限を適用できます。ワークフローを使用しない場合、カスタムタイプでも、URL空間でその下にあるものによって取得された権限を適用できます。
special_templateから呼び出されるメソッド(スキン層のPythonスクリプト、取得コンテキストのメソッド、外部メソッド、ベストプラクティスの大まかな順序)を作成することができますマクロをtal:defineステートメントを使用して実行します。私はそれを気にしないので、出力をダミー変数に代入します。副作用として使用します。次の例では、Z3ビューの道を行ってきた前提としています。これは、名前redirect_if_anonymous
で登録ビューをインスタンス化します
<body tal:define="dummy context/@@redirect_if_anonymous">
。このビューでは、アプリケーションに応じて、標準のZope APIメソッドまたはクッキーのテストを使用して、Web訪問者が認証されているかどうかをテストできます。ここに標準のAPIの例があります。ログインを強制するためにUnauthorizedが呼び出されます。
url = self.request['URL0'] + '/login.html'
self.request.response.redirect(url)
あなたが最初のクッキーをテストしたい場合は、クッキーはリクエスト変数の一部である:あなたが望むすべてが別の場所へのリダイレクトがある場合
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()を使用します。私が言及するのを忘れてしまった
if 'mycookie' not in self.request.cookies:
self.request.response.redirect(url)
ことの一つは、このことをした(して明白なことを述べるために私を撮影しない) - これが唯一の匿名ユーザーのために発生する必要があるので、任意の認証された用途には、再ログインする必要はありません – chrism
が関係を次のようにします:http://stackoverflow.com/questions/6948507/if-a-user-doesnt-have-permission-to-render-a-view-configured-on-configure-zcml –