Zend framework zend中多用户使用相同密码

Zend framework zend中多用户使用相同密码,zend-framework,authentication,Zend Framework,Authentication,我在zend框架中有以下场景: 资料 学生表 班级表,每个班级包含许多学生。 作业表,每个作业都分配给一个类并提供一个密码 我希望学生能够访问给定作业id和共享密码的作业,但应用程序要注意哪个学生登录了作业。但是Zend_Auth希望一个表同时包含用户名和密码,但在我的情况下,用户名在students表中,密码在assignments表中 任何人都可以建议一种处理学生登录的好方法,在那里他们可以共享一个密码。一种只使用用户名而不使用密码进行身份验证的方法是可行的,因为这样我就可以在一个单独的条件

我在zend框架中有以下场景:

资料 学生表 班级表,每个班级包含许多学生。 作业表,每个作业都分配给一个类并提供一个密码

我希望学生能够访问给定作业id和共享密码的作业,但应用程序要注意哪个学生登录了作业。但是Zend_Auth希望一个表同时包含用户名和密码,但在我的情况下,用户名在students表中,密码在assignments表中


任何人都可以建议一种处理学生登录的好方法,在那里他们可以共享一个密码。一种只使用用户名而不使用密码进行身份验证的方法是可行的,因为这样我就可以在一个单独的条件中进行密码检查。

共享密码是一个非常糟糕的主意。如果您共享密码,那么另一个学生只需学习一个id(通常不是高度安全的信息)即可与另一个学生一样访问资源。更好的解决方案是使用角色控制作业的访问权限,并将需要访问作业的学生置于角色中。这样,每个学生仍然可以访问作业并保留自己的id/密码对。有关的信息,请参阅Zend文档。

我认为您最好只编写自己的适配器。像这样的东西最有可能奏效:

class MyAuthAdapter implements Zend_Auth_Adapter_Interface
{
    protected $_username;
    protected $_password;
    protected $_assignment_id;

    /**
     * Sets username, password, and assignemnt ID for authentication
     *
     * @return void
     */
    public function __construct($username,$password,$assignment_id)
    {
        $this->_username = $username;
        $this->_password = $password;
        $this->_assignment_id = $assignment_id;
    }

    /**
     * Performs an authentication attempt
     *
     * @throws Zend_Auth_Adapter_Exception If authentication cannot
     *                                     be performed
     * @return Zend_Auth_Result
     */
    public function authenticate()
    {
        // logic here to check everything out and erturn a new Zend_Auth_Result     
    }
}

我之所以使用共享密码还有其他重要原因,而且网站的内容确实不是很敏感,所以我不想放弃共享密码功能。今天下午我通过使用会话找到了解决方案,但你的看起来要好得多。我明天就试一试。我应该把php文件保存在哪里,它应该叫什么?你可以把它保存在任何地方。我通常在使用ZF编写的每个应用程序中运行两个库。第一个库是我的业务库,第二个库被称为“App”,用于特定于应用程序的库文件。在这种情况下,我很可能会将适配器命名为-App\u Auth\u adapter并将其保存在:-library/App/Auth/adapter.php中,假设您使用的是正常的自动加载设置,其简单程度为$adapter=new My\u Auth\u adapter($username、$password、$assignment\u id);非常感谢,最后效果很好。由于我需要编写成功检索用户数据的eg getResultRowObject()版本,但由于将所有身份验证信息保存在一个地方的整洁性,这绝对值得一试,因此比我想象的要花费更多的时间。干杯