<dtml-call expr="REQUEST['SESSION'].set('login_user','kapi')">SESSIONの取得
<dtml-var "REQUEST['SESSION'].get('login_user')">SESSION-key有ればこっち、なければあっちを作ってみる。
<dtml-if expr="REQUEST.has_key('login_user'')">これ踏まえて、RDBでフォーム認証を作ってみる。
<dtml-call expr="REQUEST['SESSION'].set('login_user',username)">
<dtml-elif expr="not REQUEST['SESSION'].has_key('login_user')">
<dtml-call expr="REQUEST['SESSION'].set('login_user','ゲストさん')">
</dtml-if>
class Admin:ZSQLMethodUserテーブルの例として、SimpleUserFolderProductのZSQLを参考にしてます。
def __init__(self):
...省略...
def index_html(self, REQUEST=None):
""" index_html """
""" login_userキーがあり、且つNoneじゃない場合のみ
main_htmlへ通過 """
self.message = ""
if REQUEST.SESSION.has_key('login_user'):
if REQUEST.SESSION.get('login_user') != None:
print "REQUEST.SESSION.get('login_user')"
print REQUEST.SESSION.get('login_user')
return self.main_html(self, REQUEST)
return self.login_form_html(self)
def login(self, REQUEST=None):
""" login """
self.message = ""
result = self['sql'].authenticate(REQUEST).dictionaries()
self.REQUEST.set('result',result)
if result:
REQUEST.SESSION.set('login_user',result[0])
return self.main_html(self, REQUEST)
else:
self.message="ログイン情報が間違っています"
return self.login_form_html(self, REQUEST)
def logout(self, REQUEST=None):
""" logout """
self.message = ''
if REQUEST.SESSION.has_key('zcma_user'):
REQUEST.SESSION.set('login_user',None)
self.message="ログアウトしました。"
return self.logout_html(self)
/**createTables.zsql
Name: authenticate.zsql
arguments: name password
*/
SELECT
*
FROM
users
where
name = <dtml-sqlvar name type="string">
and
password = <dtml-sqlvar password type="string">
limit 1
/**予めDB、テーブルは設定しとく事。
Name: createTables.zsql
arguments:
*/
create table users (name varchar, password varchar, extra1 varchar, extra2 integer)
<dtml-var sql_delimiter>
create unique index name on users (name)
<dtml-var sql_delimiter>
create table roles (name varchar, role varchar)
<dtml-var standard_html_header >main_html
<form method="post" action="login">
<dtml-if message>
<div class="message"><dtml-var message></div>
</dtml-if>
ユーザー<input name="name" type="text"/> <br />
パスワード<input name="password" type="text"/>
<input type="submit" name="submit" value="ログイン" />
</form>
<dtml-var standard_html_footer >
<dtml-var standard_html_header >logout_html
<dtml-var "REQUEST.SESSION.get('login_user')['name']">
さんでログイン中:
<a href="./logout">ログアウト</a>
<dtml-var standard_html_footer >
<dtml-var standard_html_header >
<dtml-if message>
<dtml-var message>
</dtml-if>
<dtml-var standard_html_footer >
http://kapi.jp/kapi_blog/134
2008年04月15日
関連カテゴリ Zope