Zend创建用户并自动登录

时间:2011-10-30 15:40:45

标签: zend-framework zend-auth

我有搜索和搜索但没有答案我使用Zend Framework创建用户并成功将记录保存在zend auth中,以便他们自动登录。

我让创建用户工作得很完美但在成功之后我需要启动_getAuthAdpater()并在用户中签名。

我已经实现了以下代码,但它不会将用户数据存储在会话中。这是我的功能。

public function registerAction()

$proUser = new Application_Model_DbTable_ProUser;
$userId = $proUser->addProUser($data['email'], $data['name'], $data['password']);if($userId){

                // add new row into proBasic
                $proBasic = new Application_Model_DbTable_proBasic;
                $proBasic->addProBasic($userId);

                // add new row into proService
                $proService = new Application_Model_DbTable_proService;
                $proService->addProService($userId);                

                // Create auth session for proUser
                $adapter = $this->_getAuthAdapter();
                $adapter->setIdentity($data['email']); 
                $adapter->setCredential($data['password']);

                $auth = Zend_Auth::getInstance();
                $result = $auth->authenticate($adapter);

                if ($result->isValid()) {

                    $user = $adapter->getResultRowObject(array(
                        'proId',
                        'proName',
                        'proEmail',                     
                    ));                     
                    $auth->getStorage()->write($user);
                    return true;

                }

                return $this->_redirect('/auth/probasic/');
            }

这是_getAuthAdapter()函数:

    private function _getAuthAdapter()
{

    $authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter());
    $authAdapter->setTableName('proUser')
                ->setIdentityColumn('proEmail')
                ->setCredentialColumn('proPassword');       

    return $authAdapter;            
}

我没有收到此代码的错误,但它没有在Auth中存储用户详细信息。我已经找到了100个如何在Zend中创建登录/注册系统的示例,并且没有一个自动登录用户,所以我想知道我是否正在尝试做一些不同的事情。

干杯

学家

1 个答案:

答案 0 :(得分:2)

如果您在注册后立即创建会话,则无需对其进行身份验证。如果您使用$proService->addProService($userId)之后替换所有代码会发生什么:

$auth = Zend_Auth::getInstance();
$auth->getStorage()->write($data['email']);