2011-12-18 56 views
1

有谁知道如何执行单独的登录表单并在两个不同的表上进行身份验证? 我不能去与一个表和不同的角色...客户端请求做单独的表...Yii:如何使用两个不同的表进行身份验证

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

回答

2

我解决这个问题的方法是从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'), 
    ), 
+0

如果有人愿意,我可以在我的博客上提供重构/修改代码的下载链接? – 2011-12-19 05:06:59

+0

首先,yii-user是用户贡献的扩展 - 它不是Yii Framework的一部分。其次,用户应该知道他们与yii用户进行了什么。它的作者似乎已经放弃了,没有其他人捡起它。看看问题列表(50开放,几乎所有人都不会被自由职业者看到)。准备好自己维护它,以便首先阅读代码(例如,查看Profile模型)。它的密码处理是不安全的。我发现它需要*很多工作,最终不值得。 – 2011-12-19 14:19:28

+0

@KieranAndrews我想如果你不介意:)并谢谢你! – PsychoX 2011-12-19 22:30:45

1

您可以将属性添加到名为(例如)角色的UserIdentity组件。然后更改UserIdentity的authenticate()方法,以便从角色对应的帐户表中提取。现在您需要确保在调用UserIdentity->authenticate()之前设置UserIdentity->role。如果您按照yiic webapp模板,那么这将在SiteController。两个非常简单的方法(其中包括):

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