代码之家  ›  专栏  ›  技术社区  ›  rg88

重构Zend\u Auth实现

  •  1
  • rg88  · 技术社区  · 14 年前

    我在一个现有的项目,有两个领域,可以登录工作。一个管理部门和前端。

    如果管理员已登录并尝试登录到前端,系统会提示他们以前端用户身份登录(这是必需的,因为前端用户根据与之关联的项目获得完全不同的内容,而管理员与某个特定项目不关联)。

    一旦作为前端用户登录,他们的管理凭据就消失了,如果他们试图重新进入管理部分,就必须再次登录。

    我想使它,以便管理员可以登录到管理部分,并作为一个特定的前端用户登录。 这样就可以在站点的两个部分之间来回切换,而无需重新登录。

    当前,作为前端用户登录会导致管理用户必须重新登录才能访问管理区域。这是因为某些$\u会话凭据正在被覆盖吗?我是否需要以某种方式创建一个自定义$\u会话变量来用ZF方法处理这个问题?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Tim Fountain    14 年前

    第一个问题,你真的需要这么做吗?假设管理员用户可以访问所有项目,典型的方法是在前端给管理员一个下拉列表,列出所有项目并允许他们在项目之间切换。一旦他们选择了一个,这个选择就存储在他们的会话中,他们可以查看数据,就好像他们是作为这些用户之一登录的一样。然后他们可以随意在项目之间切换。

    $_SESSION['Zend_Auth']

    理论上,你应该可以这样做:

    public function loginAction()
    {
        $auth = Zend_Auth::getInstance();
        if (...) { // check some condition that returns true for admin logins
            // setup storage with custom admin namespace (can be any string)
            $authStorage = new Zend_Auth_Storage_Session('Yourapp_Admin_Auth');
        } else {
            // use defaults
            $authStorage = new Zend_Auth_Storage_Session();
        }
        $auth->setStorage($authStorage);
    
        // carry on login as normal
        [...]
    }
    

    所以,这是为了让Zendëu Auth使用 $_SESSION['Yourapp_Admin_Auth'] 对于管理员登录和默认 $\u会话['Zend\u Auth']