0

我将 Zend_Auth 与“数据库表身份验证”一起使用。我想要做的是允许用户使用用户名或电子邮件地址作为“identityColumn”登录。我怎么会允许两者。我被困住了。

4

3 回答 3

3

扩展并实现您自己的 Auth Adapter 并使用“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 回答
0

使用 2 个不同的对象进行两次身份验证(如果需要),Zend_Auth_Adapter_DbTable并添加一些逻辑来确定登录是用户名还是电子邮件,方法是猜测是否提供了哪种类型的登录用户,以便在大多数情况下保存一个查询。

于 2009-09-06T18:20:05.663 回答