Zend_Authでは重複するID・パスワードに注意
Zend Frameworkで会員認証(ログインページ)を行うには、Zend_Authを使用すると簡単にできます。
Zend_Authによる認証
ただし注意しなければいけないのが、Zend_Authが認証の問い合わせをした際に、複数のIDが出てきた場合にはログインできません。
パスワードが違う場合でも、ログインできません。
次のように削除フラグなどを使用して、論理削除をする場合でもログインできません。
$authAdapter->->setCredentialTreatment('MD5(?) and is_delete=0');
認証の問い合わせを行うSQL文は次のようになっています。
SELECT `【認証テーブル】`.*, ( CASE WHEN `【パスワードカラム】` = MD5('【パスワード】') is_delete=0 THEN 1 ELSE 0 END ) AS `zend_auth_credential_match` FROM `member_table` WHERE (`【IDカラム】` = '【ID】');
パスワードの条件はWHERE句ではなくカラムのCASE条件に使用されています。
つまり削除フラグが付いているものやパスワードが違うものがあっても、複数レコード出てきます。
そのうち認証できるものは zend_auth_credential_match が 1 のものですが、1のものがあっても複数レコード出てきたときには認証できません。
関連記事
- Composerコマンドでウクライナへのメッセージが表示されたことがあります
- Live Commerceとは
- CakePHP、Symfony、Zend Frameworkの比較
- リダイレクトとフォワード
- クエリデバッグする方法
- 'Zend_Db_Statement_Exception' with message 'SQLSTATE[HY000]: General error' とは
- Zend_DBのSELECTメソッドのまとめ
- Zend_DBの基本
- Zend_Authによる認証 (ログインページを作る)
- Zend Frameworkのデータベース接続
- Smartyを利用する方法
- ビューヘルパー
- 環境を分ける方法
- ビュー(テンプレート)の基本
- アクションコントローラの基本
- アクションコントローラとビューの関係
- コマンドで雛形を作る CLIツール
- 推奨ディレクトリ構成
- 環境設定とインストール
- 最小版のファイル一覧
- ファイル一覧
- 基本的な特徴
スポンサーリンク