0

「データベーステーブル認証」で Zend_Auth を使用しています。私がしたいのは、ユーザーが「identityColumn」としてユーザー名または電子メールアドレスを使用してログインできるようにすることです。どうすれば両方を許可できますか。私は立ち往生しています。

4

3 に答える 3

3

独自の認証アダプタを拡張して実装し、「WHERE username = ? or email = ?」のようなクエリを使用します。認証結果を取得するには:)

于 2009-09-06T19:03:33.017 に答える
0

これが最もクリーンな Zend_Auth 実装ではないことはわかっていますが、機能します。唯一の問題は、誰かが別のメール アドレスをユーザー名として登録した場合に発生しますが、もちろん、登録フォームでこれを防ぐことができます。それが役に立てば幸い。

// if the entered value validates as an email address then use the 'email' field
// if not, use the 'username' field
$validator = new Zend_Validate_EmailAddress();
if ($validator->isValid($form->getValue('password'))) {
    $identityField = 'email';
} else {
    $identityField = 'username';
}

$authAdapter = new Zend_Auth_Adapter_DbTable(
    $dbAdapter,
'users',
    $identityField,
    'password',
    'SHA1(?)'
);

$authAdapter->setIdentity($form->getValue('username'))
    ->setCredential($form->getValue('password'));
于 2011-09-30T19:36:50.477 に答える