彼らがログイン中は、そのセッション情報はクッキーを使って彼らのコンピュータの中に入っています。
もし彼らが長い間アクセスしていない場合、自動的にログアウトされます。
このモジュールはクッキーを使った認証の実装を簡単にします。
これは多くのクッキー認証のやり方とは違い、セッション情報を入れるために、サーバサイドにデータベースを必要としません。セッション情報を入れるのには3つのクッキーを使います。
このモジュールを使うには、CookieAuthenticateを継承したCherryClassを宣言することであり、そうすればそのCherryClassのmaskとviewは自動的に保護されます。
この魔法を実行するために、CookieAuthenticateはAOP(アスペクト指向プログラミング)を使います。これは基本的に、各maskとviewの先頭に追加するコードをつけくわえる、ということを意味します。
以下の変数とメソッドを使う事ができます:
variable: loginCookeName
ログイン名が入っているクッキーの名前の文字列変数です(デフォルト値はCherryLogin)。
variable: dateCookieName
最後にアクセスした時間が入っているクッキーの名前の文字列変数です(デフォルト値はCherryDate)。
variable: passwordCookieName
パスワードが入ったクッキーの名前の文字列変数です(デフォルト値はCherryPassword)。
variable: timeout
タイムアウトを分単位で入っている整数です。もしユーザーがこの時間アクティブではないと、自動的にログアウトされます。デフォルト値は60分です。タイムアウトさせたくない場合、0をセットしてください。
function: getPasswordListForLogin(login)
これは有効なログイン/パスワードの組み合わせを指定した場所です。引数はユーザーが入ったloginです。このメソッドはこのログイン名に対して有効な全てのパスワードのリストを返します。もしログイン名が間違っている場合、空のリストを返します。
注意:一つのログイン名にマッチする複数のパスワードを返すことができるということは、どのログイン名でも有効に働く「マスターキー」のパスワードを持ったままにするということです。
mask or view: loginScreen(message, fromPage, login='')
これはユーザーがログインしないで保護されたページにアクセスしようとした時に表示するページです。
messageは、誰もログインしていない理由が入った文字列です。 可能な値は:
fromPageはユーザーがアクセスしようとしたページのURLがはいった文字列です。
loginはもしログインしたユーザーがいたらそのユーザー名が入っている文字列です。もしこの文字列が空ではない場合、ユーザーがログインして入って来ていたということです。しかしパスワードが間違っていた場合、これはユーザーがそこにログイン名を使っているクッキーを持っているということです。これはフォーム上にログイン名の表示を許すことであり、よってユーザーは毎回ログイン名を入れる必要がなくなるというわけです。
CherryClassはデフォルトのloginScreen maskから成り立ちます。あなたはたぶん必要に応じてカスタマイズするため、これを上書きしたいとおもっているでしょう。それを行うには、3つのパラメータ(login, password, そしてfromPage)を持ったdoLoginメソッドを呼び出すフォームを定義することです。3つのパラメータの内、最初の2つはユーザーによって入力されます。3つ目は関数へ渡す値を持っているhiddenフィールドです。
以下のコードはloginScreenmaskのデフォルトの実装です:
<html><body>
Message: <div py-eval="message">message</div>
<form method="post" action="doLogin">
Login: <input type=text name=login py-attr="login" value="" length=10><b
r>
Password: <input type=password name=password length=10><br>
<input type=hidden name=fromPage py-attr="fromPage" value=""><br>
<input type=submit>
</form>
</body></html>
mask 又は view: logoutScreen()
このページはユーザーがログアウトした後に表示されます。このメソッドはdoLogoutメソッドによって呼び出されます。
必要に応じて上書きすることができます。
view doLogout()
これはログアウトを実行するために呼び出すmaskまたはviewです。このメソッドはログアウトを実行し、それからログアウトスクリーンを表示するためにlogoutScreenメソッドを呼び出します。
variable: login
ログインするユーザーのログイン名が入っている文字列です。 この文字列は誰もログインしていない場合は空になっています。
use CookieAuthenticate
CherryClass MemberArea(CookieAuthenticate):
mask:
def index(self):
<html><body>
Welcome to the member area, <py-eval="self.login"><br>
If you want to log out, just click <a py-attr="self.getPath()+'/doLogout
'" href="">here</a>.<br>
Otherwise, just click <a py-attr="request.base" href="">here</a> to go b
ack to the home page.
</body></html>
def loginScreen(self, message, fromPage, login=''):
<html><body>
Welcome to the login page. Please enter your login and password belo
w:
<py-if="message==self.wrongLoginPasswordMessage">
<br><font color=red>Sorry, the login or password was incorrect</
font>
</py-if>
<form method="post" action="doLogin">
Login: <input type=text name=login py-attr="login" value="" leng
th=10><br>
Password: <input type=password name=password length=10><br>
<input type=hidden name=fromPage py-attr="fromPage" value=""><br
>
<input type=submit value="Login">
</form>
</body></html>
def logoutScreen(self):
<html><body>
You have been logged out.<br>
Click <a py-attr="request.base" href="">here</a> to go back to the h
ome page.
</body></html>
function:
def getPasswordListForLogin(self, login):
if login=="login": return ["password"]
return []
CherryClass Root:
mask:
def index(self):
<html><body>
Hi, welcome to my site<br>
<py-if="self.login">
You are currently logged in as <py-eval="self.login"><br>
Click <a py-attr="memberArea.getPath()+'/doLogout'" href="">here
</a> to log out
</py-if><py-else>
You are not currently logged in.<br>
Click <a py-attr="memberArea.getPath()+'/index'" href="">here</a
> to login
</py-else>
</body></html>