何回かに分けて、SmartyでPEAR::Auth を使うためのサンプルを説明しています。
「その4でひとまず終わり」と思っていたら、動かないというご指摘を頂きまして、login.tpl を載せていないことに気が付きました。
ついでに、書き忘れていた注意点も。
login.tpl
<!DOCTYPE html> <html dir="ltr" lang="ja"> <head> <meta charset="UTF-8" /> <title>{$smarty.const.APPLICATION_TITLE_NAME}</title> </head> <body> <form method="post" action="{$smarty.server.PHP_SELF}"> <table> <tr> <th>ユーザー名</th> <td><input type="text" name="username"></td> </tr> <tr> <th>パスワード</th> <td><input type="password" name="password"></td> </tr> <tr> <td colspan="2"><input type="submit" value="ログイン"></td> </tr> </table> </form> </body> </html>
ログインページのテンプレートです。
PEAR::Auth の仕様で、input の name 属性は、ユーザ名は username 、パスワードは password 固定です。
注意点
今までのことで書き忘れていたことです。
template_c のアクセス権
Smarty はテンプレートをコンパイルして template_c ディレクトリに置きます。
Smarty は HTTPサーバのユーザ( apache など )の権限で動いており、一方 ftp などで template_c を作ると各ユーザの所有になります。
なので、アクセス権は 777 になっていないとダメかもしれません( ユーザ apache が読み書きできる必要がある)。
文字コード
サンプルはUnicode用にしています。
それ以外の文字コードの場合は、テンプレートファイル(*.tpl)のcharset を変更(Shift_JIS や EUC-JP)してください。
PEAR のパッケージ
PEARのパッケージは始めから全部はいっていないので、必要に応じてインストールしてください。
インストールされているかの確認はコマンドラインから。
pear list
今回のサンプルでは少なくとも Auth と DB のパッケージが必要です。
もしインストールされていなければ、
pear install Auth
などとして、インストールしてください。
PEAR::Auth と Smarty の適用例を探して辿り着きました。
仕事ではないのですが、自己啓発でPHPを使ったシステムを作っています。
お陰さまで、認証できるようになりました。 ありがとうございます。
さらにDBの他のフィールドに記録してあるパスワードの更新日付を参照して、「現在より3ヶ月以上前ならパスワードの更新画面(chpwd.tpl)を表示させる」というのをチャレンジしました。
方法としては、最初の認証成功後にindex.phpがもう一度読み込まれるときに、パスワードの更新日付が古ければchpwd.tplを表示させています。
chpwd.tplで新しいパスワードが入力されると、三たびindex.phpに戻ってくるので、DBへのパスワード更新クエリを発行しています。
一応、changePassword()も実行していますが、うまく行っているのかは不明です。
とりあえずDBの更新などは成功しているのですが、どうもエレガントじゃないのがないような気がして気に入らないですね。