标签: zend-auth

Zend_Auth存储如何工作?

这很简单.我写

$auth->getStorage()->write($user);
Run Code Online (Sandbox Code Playgroud)

然后我想,在一个单独的进程中加载​​这个$ user,但我不能因为

$user = $auth->getIdentity();
Run Code Online (Sandbox Code Playgroud)

是空的.我不是只是......设定它?为什么不起作用?HALP?

[编辑2011-04-13]

大约两年前就有人问过这个问题.但事实是,我在2010年7月重复了这个问题并得到了一个很棒的答案,我当时根本就不明白.

链接:Zend_Auth无法写入存储

我已经构建了一个非常好的litte类,我使用与Zend_Auth相同的存储引擎在所有项目中使用(有时需要额外调整),但是避免了所有不好的事情.

<?php

class Qapacity_Helpers_Storage {

    public function save($name = 'default', $data) {

        $session = new Zend_Session_Namespace($name);
        $session->data = $data;

        return true;
    }

    public function load($name = 'default', $part = null) {

        $session = new Zend_Session_Namespace($name);

        if (!isset($session->data))
            return null;

        $data = $session->data;

        if ($part && isset($data[$part]))
            return $data[$part];

        return $data;
    }

    public function clear($name = 'default') {

        $session = new Zend_Session_Namespace($name);

        if (isset($session->data))
            unset($session->data);

        return true;
    }

} …
Run Code Online (Sandbox Code Playgroud)

storage zend-framework zend-auth

5
推荐指数
1
解决办法
1万
查看次数

Zend_Auth检查用户是否已登录

我试过用:

// do login if request is posted
if (isset($_POST) && !empty($_POST)) {
    // do authencation
    ...
} else {
    // request not posted
    // see if already logged in
    if (Zend_Auth::getInstance()->hasIdentity()) {
        echo "already logged in as: " . Zend_Auth::getInstance()->getIdentity();
    }
}
Run Code Online (Sandbox Code Playgroud)

Zend_Auth::getInstance()->hasIdentity() 似乎总是假的......即使登录后也是如此

php zend-framework zend-auth

5
推荐指数
1
解决办法
8494
查看次数

Zend Framework:如何在使用DbTable Auth Adapter时检查其他列?

目前,我正在定期DbTable Auth Adapter:

protected function _getAuthAdapter($formData)
{       
    $dbAdapter = Zend_Db_Table::getDefaultAdapter();
    $authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);
    $authAdapter->setTableName('users')
        ->setIdentityColumn('username')
        ->setCredentialColumn('password');
    $authAdapter->setIdentity($formData['username']);
    $authAdapter->setCredential(md5($formData['password']));
    return $authAdapter;
}
Run Code Online (Sandbox Code Playgroud)

但我想检查数据库中的其他列(IsActive例如).我不知道是否可以使用适配器完成此操作.如何才能做到这一点?

zend-framework zend-auth zend-db

5
推荐指数
1
解决办法
2557
查看次数

Zend会话和zend auth

我通过zend auth创建了一个登录系统,这里是代码

// userAuthentication
   public function authAction(){
       $request     = $this->getRequest();
       $registry    = Zend_Registry::getInstance();
       $auth        = Zend_Auth::getInstance(); 
       $DB = $registry['DB'];
           $authAdapter = new Zend_Auth_Adapter_DbTable($DB);
               $authAdapter->setTableName('user')
                            ->setIdentityColumn('user_name')
                            ->setCredentialColumn('user_password');

      $username = $request->getParam('username');
      $password = $request->getParam('password');
      $authAdapter->setIdentity($username);
      $authAdapter->setCredential($password);
      $result = $auth->authenticate($authAdapter);

      if($result->isValid()){
           $data = $authAdapter->getResultRowObject(null,'password');
           $auth->getStorage()->write($data);
           $this->_redirect('/login/controlpannel');
       }else{
           $this->_redirect('/login/login');
        }
  }
Run Code Online (Sandbox Code Playgroud)

这项工作现在很好.用户(表)中也有user_id(列),其中也有用户名和密码.我需要从这个表中获取特定的user_id,只需登录并将其放入会话中

$user_session = new Zend_Session_Namespace('user_session');
$user_session->username = $username;
$user_id->user_id       = $user_id;
Run Code Online (Sandbox Code Playgroud)

这样我就可以查询这个$ user_id的一些信息,并将结果传递给view(name)controlpanel

zend-framework zend-auth zend-session

5
推荐指数
2
解决办法
1万
查看次数

添加Zend_Auth_Adapter_DbTable的条件

这似乎是一个愚蠢的问题,但在这段代码中,我将在哪里插入条件 'WHERE state=1'

    public function loginByUsernameAndPassword($username, $password)
    {   
        $this->_auth_adapter = new Zend_Auth_Adapter_DbTable( $this->getAdapter() );
        $this->_auth_adapter->setTableName('zend_administration_user')
                            ->setIdentityColumn('user_nm')
                            ->setCredentialColumn('password')
                            ->setCredentialTreatment('SHA1(CONCAT(?,salt))');
        $this->_auth_adapter->setIdentity($username)
                            ->setCredential($password);
        $result = Zend_Auth::getInstance()->authenticate($this->_auth_adapter);
        return $result->isValid();
    }
Run Code Online (Sandbox Code Playgroud)

zend-framework zend-auth

4
推荐指数
1
解决办法
2796
查看次数

Zend 2 Auth与Bcrypt?

谷歌没有太多的解决方案(类似的问题,但没有答案).

由于bcrypt每次都会生成一个新哈希,因此身份验证失败.我查看了代码(也许是自己扩展类),但它非常混乱(更喜欢本机解决方案).我该怎么$bcrpt->verify()$identity->isValid()

编辑:目前,我已经将认证DbTable类子类化,并且它正在运行,但我非常怀疑它是否已经过优化/"完全正确".仍在寻找"优雅"的解决方案.

bcrypt zend-auth zend-framework2

4
推荐指数
1
解决办法
3807
查看次数

编辑用户配置文件后更新Zend_Auth_Storage

我有以下情况:我有用户,使用DB表进行标准认证

$authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter()); 
$authAdapter->setTableName('users'); 
$authAdapter->setIdentityColumn('user_name'); 
$authAdapter->setCredentialColumn('password'); 
Run Code Online (Sandbox Code Playgroud)

当用户编辑他的配置文件时,我将其保存到Db中,但我还需要更新存储(使用标准Zend_Auth_Storage_Session).有什么简单的方法怎么做?非常感谢.

php authentication zend-framework zend-auth

3
推荐指数
2
解决办法
3587
查看次数

如何在Zend中重定向到不同的控制器操作

我正在创建一个简单的网站,用户可以在其中注册,然后登录并添加文本文章.如果没有登录,访问者将拥有访客的角色,并且只能查看文章.我这样做是作为Zend框架1中的练习,因为我刚开始学习Zend.我将创建一个控制器AuthController用于登录,但我想知道如何从IndexController中的indexAction重定向到该控制器中的登录操作.另外,如何使用自定义插件来实现这种访问控制?我该如何调用它?

php zend-framework zend-auth zend-acl

3
推荐指数
2
解决办法
3万
查看次数

在Zend身份验证中,如何检查其他列以及身份验证?

我有一个场景,我需要在进行身份验证时检查一些其他列.这是因为,应用程序将一些用户名存储在数据库中,一些用户名存储在LDAP中.身份验证优先级适用于数据库中的用户名.如果数据库中存在用户名,我们将不会检入LDAP,否则我们将在LDAP中进行检查.

对于LDAP用户,我们在同一个"用户"表中保留了一个用户名的副本,其中包含一个空密码列.为了令两组用户感到厌恶,还有一个名为userDirectory的列,其值为"LDAP和INTERNAL".我们必须为应用程序特定设置和所有设置保留LDAP用户名的副本.

username + userDirectory也是uniqueKey

现在我的问题是,有时会有多个用户具有相同的用户名但在不同的userDirectory中.如上所述,LDAP用户不会将密码存储在数据库中,并且该身份验证是一个单独的代码段.

我使用以下代码进行数据库身份验证.即使我添加条件setCredentialTreatment('md5(?)AND userDirectory ="internal"'),它也在搜索LDAP用户.我如何限制userDirectory ='internal'

$dbAdapter = Zend_Db_Table::getDefaultAdapter();
$authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);
$authAdapter->setTableName('users')
            ->setIdentityColumn('username')
            ->setCredentialColumn('password')
            ->setCredentialTreatment('md5(?) AND userDirectory="internal"');
$authAdapter->setIdentity($username);
$authAdapter->setCredential($password);
Run Code Online (Sandbox Code Playgroud)

zend-framework zend-auth

2
推荐指数
1
解决办法
1424
查看次数

如何从Zend_Auth会话中获取会话ID?

使用默认的Zend_Auth会话存储(PHP会话),它会创建会话ID并将其放入cookie中.如果我想获得经过身份验证的用户的用户名(身份),则该Zend_Auth::getInstance()->getIdentity()方法可以获得该用户名.但是,我想获得用户的会话ID.我只能通过查看$_COOKIE或使用session_id()但似乎是hackish 来获得它,如果我离开PHP会话存储可能会破坏?那么获取Zend_Auth会话的当前会话ID的最佳方法是什么?

php zend-framework zend-auth zend-session

2
推荐指数
1
解决办法
7527
查看次数