彼らがログイン中は、そのセッション情報はクッキーを使って彼らのコンピュータの中に入っています。
もし彼らが長い間アクセスしていない場合、自動的にログアウトされます。
このモジュールはクッキーを使った認証の実装を簡単にします。
これは多くのクッキー認証のやり方とは違い、セッション情報を入れるために、サーバサイドにデータベースを必要としません。セッション情報を入れるのには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>