ZF2身份验证

时间:2013-01-23 09:47:06

标签: authentication zend-framework2

我正在使用ZF2开发应用程序。我用username&amp ;;完成了用户身份验证。密码。但是,我想在身份验证中检查一个额外的列(例如:status)。

我已经完成了以下代码。

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。 感谢。

2 个答案:

答案 0 :(得分:7)

当我使用zf2和doctrine构建我的身份验证时,我创建了授权插件并自定义this adapter以传递额外的列进行身份验证。 您可能需要继续进行类似的指导。

$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();

Reference

更改后,您的代码看起来应该是这样的。

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;
}

答案 1 :(得分:1)

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

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

此致 马克