我正在处理一个现有的项目,它有两个可以登录的区域。一个管理部门和前端。
目前,管理部分有一个登录操作,前端有自己的登录操作。Admin登录在使用专门用于管理帐户的数据库表中,前端将使用不同的表一起登录。
如果管理员登录并尝试登录到前端,则提示他们作为前端用户登录(需要这样做,因为前端用户根据与其关联的项目获得完全不同的内容,而admin与某个特定项目无关)。
一旦作为前端用户登录,他们的管理凭据就会消失,如果他们试图重新进入管理部分,就必须再次登录。
我想做它,以便管理员可以登录到管理部分,并作为一个特定的前端用户登录。因此,能够在站点的两个部分之间来回切换,而无需重新登录。
在Zend中处理这个问题的最好方法是什么?
到目前为止,我正在考虑失去单独的登录操作,只有一个(不需要两个,对吗?)然后我要处理的是允许单独的证件。
当前,作为前端用户登录会导致管理用户不得不重新登录才能访问管理区域。这是因为某些$_SESSION凭据被覆盖了吗?我是否需要以某种方式创建一个自定义$_SESSION变量来以ZF的方式处理这个问题?
显然,我不能直接将一个值分配给$_SESSION‘前端’或$_SESSION'admin',那么如何在Zend中完成这个任务呢?
谢谢!
发布于 2010-09-27 20:30:42
第一个问题,你真的需要这么做吗?假设管理员用户可以访问所有项目,这样的典型方法就是在前端给管理员一个下拉列表,让他们可以在这些项目之间进行切换。一旦他们选择了一个,这个选择就会存储在他们的会话中,并且他们可以查看数据,就好像他们是作为其中的一个用户登录的一样。然后,他们可以随意地在项目之间切换。
如果你真的需要两个登录,这当然是可能的。默认情况下,Zend_Auth使用类Zend_Auth_Storage_Session在会话中存储身份验证结果。这个类默认使用会话名称空间'Zend_Auth‘(即数据存储在$_SESSION['Zend_Auth']中),因此当前端用户成功地登录到管理员时,其会话auth数据将被管理员auth的结果覆盖。因此,您想要做的是让Zend_Auth_Storage_Session为管理登录使用不同的名称空间(或者每个名称空间都使用自定义名称空间)。
从理论上讲,你应该能够做这样的事情:
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_Auth对管理登录使用$_SESSION['Yourapp_Admin_Auth'],对于前端登录使用默认的$_SESSION['Zend_Auth']。
https://stackoverflow.com/questions/3807174
复制相似问题