0

我需要告诉 Zend 一个用户是在一个非常特定的场合被认证的,但我不想为此目的构建一个 Auth Adapter。

我想要这样的东西:

if ($user == 'sam') {

    // this user is valid, tell Zend to authenticate
    Zend_Auth::authenticate(true);

}

换句话说,我不想将确定用户是否有效的任务委托给某个 Auth Adapter。我想告诉 Zend “嘿,这家伙和我在一起,所以设置身份验证 cookie 并让他使用我的网站”。

有没有办法做到这一点?

4

2 回答 2

1

您可以通过写入 Zend_Auth 存储来做到这一点:

$userData = (object)array('username' => 'Johny23');
Zend_Auth::getInstance()->getStorage()->write($userData);

当你这样做时,Zend 会自动创建新的 Zend_Auth_Storage_Session 对象来处理会话。

然后,您可以检查:

$auth = Zend_Auth::getInstance();
if($auth->hasIdentity()){
    echo 'welcome back, ' . $auth->getIdentity()->username;
}
于 2013-03-07T18:09:49.433 回答
0

http://framework.zend.com/manual/1.12/en/zend.auth.adapter.dbtable.html

查看Advanced Usage By Example下的最后一个代码,代码如下

    $registry       =   Zend_Registry::getInstance();
    $DB             =   $registry['DB'];
    $authAdapter    =   new Zend_Auth_Adapter_DbTable($DB,'usertable','username','password');

    $authAdapter->setIdentity($request->getParam('username'));
    $authAdapter->setCredential($request->getParam('password'));

    $select         =   $authAdapter->getDbSelect();
    $select->where('`active` = 1');
    $result         =   $authAdapter->authenticate();

    if($result->isValid()){
            //set user proper to zend instance
            $this->_redirect('/index');
    }
    else
    {
       //logout or redirect to same page
    }
于 2013-04-04T13:14:29.800 回答