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のものがあっても複数レコード出てきたときには認証できません。

関連記事

スポンサーリンク

Math.floor

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る