【问题标题】:Yii: How to authenticate using two different tablesYii:如何使用两个不同的表进行身份验证
【发布时间】:2011-12-19 22:01:39
【问题描述】:

有谁知道如何做单独的登录表单并在两个不同的表上进行身份验证? 我不能使用一张桌子和不同的角色...客户要求做单独的表格...

我有基于 Yii 框架登录系统的用户登录系统。但是现在我必须为管理员用户(管理模块)做单独的事情。

【问题讨论】:

    标签: authentication login module yii


    【解决方案1】:

    我解决这个问题的方法是从 Yii 框架库中创建这个插件的两个完全相同的副本:

    http://www.yiiframework.com/extension/yii-user/

    然后我对其进行了重构并将其命名为“客户”并更改了配置,以便它使用不同的表等。

    在 Yii 的配置选项中,我还包括了这些选项以保持会话分离(config/main.php):

    'components' => array(
        ...
        'user' => array(
            // enable cookie-based authentication
            'allowAutoLogin' => true,
            'loginUrl' => array('/user/login'),
            'class' => 'RWebUser', // added - possibly uses the Rights user manager
        ),
        'customer' => array(
            // enable cookie-based authentication
            'allowAutoLogin' => true,
            'loginUrl' => array('/customer/login'),
            'stateKeyPrefix' => 'customer',
        ),
        'customerUser' => array(
            'class' => 'CWebUser',
            'stateKeyPrefix' => 'customer',
            'loginUrl' => array('/customer/login'),
        ),
    

    【讨论】:

    • 如果有人愿意,我可以在我的博客上提供重构/修改代码的下载链接?
    • 首先,yii-user 是一个用户贡献的扩展——它不是 Yii 框架的一部分。其次,用户应该知道他们正在使用 yii-user 做什么。它似乎已被其作者遗弃,没有其他人捡起它。查看问题列表(50 个开放,几乎所有这些都未经 autohor 审查)。准备好自己维护它,因此请先阅读代码(例如,查看 Profile 模型)。它的密码处理非常不安全。我发现它需要大量的工作,最终不值得。
    • @KieranAndrews 如果你不介意的话,我想 :) 谢谢你!
    • @KieranAndrews 你好。你还记得我吗? :)
    • @KieranAndrews 或者如果您不想在您的博客上发布此代码,您可以将它发送到 lukas.openid@gmail.com 吗?
    【解决方案2】:

    您可以向UserIdentity 组件添加一个属性,例如角色。然后更改 UserIdentity 的authenticate() 方法,使其从角色对应的帐户表中获取。现在您需要确保在调用UserIdentity->authenticate() 之前设置了UserIdentity->role。如果您遵循yiic webapp 模板,那么这将在SiteController 中。两种非常简单的方法(除其他外):

    1. 有两个不同的登录页面,一个用于普通用户,一个用于管理员,每个都有自己的 URL。在SiteController 中使用两个视图和两个登录操作方法来实现它,每个都在调用UserIdentity->authenticate() 之前适当地设置UserIdentity->role。这种方法复制了代码,一旦它工作,您将能够看到如何对其进行排序。
    2. 使用带有管理员用户选择的表单元素(可能是复选框)的登录页面。此表单的操作方法UserIdentity->role 根据表单状态。

    【讨论】:

      猜你喜欢
      • 2013-09-18
      • 2021-10-06
      • 1970-01-01
      • 1970-01-01
      • 2015-06-03
      • 1970-01-01
      • 2013-06-28
      • 1970-01-01
      • 2016-05-23
      相关资源
      最近更新 更多