6

我正在使用 ZF2 开发应用程序。我已经使用用户名和密码完成了用户身份验证。但是,我想在身份验证中检查一个附加列(例如:状态)。

我已经完成了以下代码。

public function authenticate()
{       
    $this->authAdapter = new AuthAdapter($this->dbAdapter,
            'usertable',
            'username',
            'password'
    );  

    $this->authAdapter->setIdentity($this->username)
                ->setCredential($this->password)
                ->setCredentialTreatment('MD5(?)');
    $result = $this->authAdapter->authenticate();
    return $result;
}

如何检查身份验证中的“状态”列?注意:状态值应为 1。谢谢。

4

2 回答 2

7

当我使用 zf2 和教义构建身份验证时,我创建了授权插件并自定义了此适配器以传递额外的列进行身份验证。你可能需要继续类似的方向。

$adapter = new AuthAdapter($db,
                           'users',
                           'username',
                           'password',
                           'MD5(?)'
                           );

// get select object (by reference)
$select = $adapter->getDbSelect();
$select->where('active = "TRUE"');

// authenticate, this ensures that users.active = TRUE
$adapter->authenticate();

参考

更改后,您的代码应如下所示。

public function authenticate()
{       
    $this->authAdapter = new AuthAdapter($this->dbAdapter,
            'usertable',
            'username',
            'password'
    );  

    $select = $this->authAdapter->getDbSelect();
    $select->where('status= "1"');
    $this->authAdapter->setIdentity($this->username)
                ->setCredential($this->password)
                ->setCredentialTreatment('MD5(?)');
    $result = $this->authAdapter->authenticate();
    return $result;
}
于 2013-01-23T11:25:15.200 回答
1

由于该方法,ZF2 提供了另一种方法来处理使用其他列而不是预见的身份和凭证列的附加检查getResultRowObject。您的示例中的所有列 usertable都可用作 . 返回的对象的属性getResultRowObject()。所以你可以用这个扩展你的代码:

if ($result->isValid()) {
    $identityRowObject = $this->authAdapter->getResultRowObject();
    $status = $identityRowObject->status;
    // do whatever complex checking you need with $status...
}

问候, 马克

于 2014-03-12T16:12:07.967 回答