ログイン認証を行うので前もってMySQLにアカウント(IDとパスワードのペア+α)を作成しておきます。
ではまずテーブル設計から
IDとパスワードは必須なので、+αとして適当に連絡用メールアドレスやアクセス階級および備考ぐらいを付け足しておくとします。
Zend_Auth解説サイトの使用例とか見てみると、パスワードをMD5ハッシュ化して保存してる記述が多いのでこれを真似てみたいと思います。
(これは何のおまじないでしょうか?どう考えてもDBに入り込んでパスワード覗かれるような事態だと他のデータも全部覗かれるでしょと突っ込みたくなりますが・・もしかしたら関係者内部の不正アクセスを防止する意味合いが強いんでしょうかね)
ここまで固まったらSQLインタプリタから流し込むSQLスクリプト作成です。
SQLスクリプト [C:\input.sql]
xamppのコントロールパネルから[Shell]を押して上記スクリプトを流し込みます。
# mysql -u root < /input.sql
MySQL接続情報
dbname ..authtest
host ..localhost
username ..myuser
password ..mypass
ログイン認証用テーブル情報
テーブル名: account
ユーザID: zenduser
パスワード: zendpass
ユーザ登録まで済ませているので、ログイン認証を行います。
ログイン認証スクリプト [htdocs/login.php]
入力IDはバリデータを使って「先頭英文字で英数字並び。間に"-"ハイフンが入ってもいい」形式であることと「4〜20バイト長」であることを検証しています。
また、英大文字があればフィルターを使って小文字にするようにしています。
パスワードは「8〜20バイト長」であることを検証しています。
MVCでの認証サンプル例が多いのでMVCを使わない認証例を書いてみました。なのでビューオブジェクト作成は自前で行うことになります。
MVCではアクションにおいて$this->getRequest()->isPost()を使ってPOST送信が行われたかどうか判断します。
MVCを使わない場合はサーバ変数$_SERVER['REQUEST_METHOD']で代用できると思います。
まず入力データをフォームオブジェクトのisValid()で検証することで粗方の形式にそぐわなければ、よりコストの高いデータベース処理へは行かないようにします。
検証を通過すればID文字に英大文字があればフィルター処理"StringToLower"により小文字にして取得します。
それからAuthオブジェクトを取得して認証するまでになんやかんやセットする必要があります。
とある解説サイトにはZend_Authを使えば認証が「まぁ、こんなに簡単に。バラ色」みたいな勢いで書かれていたけど実際に使ってみたらそうでもない気がします。
0から全部自力で書いた方が格段に楽な気がします。
setCredentialColumn()とかsetCredentialTreatment()とか覚えられないし・・
でもきっとその先に便利ななにかがあるんでしょうね。。
ログイン認証画面
パスワードをわざと4バイトと少なく入力してボタンを押した結果が上の表示になります。
Errorsデコレータ(デフォルトON)の働きにより、検証に引っかかった入力内容を表示しています。
認証が成功して次画面へ飛んだ時に以下のセッションファイルが作成されました。
[C:\xampplite\tmp\sess_************************]
ここにちゃんとユーザIDを保持しているのがわかります。