5

我有一个 Cake 网站,它需要有两个单独的登录名,每个人都有自己的登录表单并查看不同的页面,最好有两个不同的表,因为这两种类型的人之间没有相似之处。

每个登录表单只能由某些人使用,他们永远不会登录到另一个表单,反之亦然。

还有,两个登录表有关系,需要2个表?

这可能吗?

4

5 回答 5

10

首先,添加几个空的自定义身份验证对象。我们将重用 FormAuthenticate 使用的相同逻辑(即使用 POST 数据检查用户的数据库),但只需在对象设置中更改模型(稍后)。

应用程序/控制器/组件/Auth/ModelOneAuthenticate.php

<?php
App::uses('FormAuthenticate', 'Controller/Component/Auth');

class ModelOneAuthenticate extends FormAuthenticate {
}

app/Controller/Component/Auth/ModelTwoAuthenticate.php

<?php
App::uses('FormAuthenticate', 'Controller/Component/Auth');

class ModelTwoAuthenticate extends FormAuthenticate {
}

然后告诉您的应用使用这些对象进行身份验证,并告诉它使用什么模型。您还可以在此处自定义字段。在您的 AppController 中:

public $components = array(
    'Auth' => array(
        'authenticate' => array(
            'ModelOne' => array(
                'userModel' => 'ModelOne',
                'fields' => array(
                    'username' => 'my_custom_username_field',
                    'password' => 'some_password_field'
                )
            ),
            'ModelTwo' => array(
                'userModel' => 'ModelTwo'
            )
        )
    )
);

第一个身份验证对象将检查model_ones表中的用户名 inmy_custom_username_field和密码 in some_password_field,而第二个身份验证对象将model_twos使用标准usernamepassword字段进行检查。

于 2012-06-21T21:50:48.490 回答
2

最简单的方法是为每种登录类型设置不同的会话密钥:

if ($loginTypeOne) {
  $this->Auth->authenticate = array(
    'Form'=> array(
      'userModel'=> 'TypeOne',
      )
    );
  AuthComponent::$sessionKey = 'Auth.TypeOne';
} else {
  $this->Auth->authenticate = array(
    'Form'=> array(
      'userModel'=> 'TypeTwo',
      )
    );
  AuthComponent::$sessionKey = 'Auth.TypeTwo';  
}
于 2012-10-30T08:05:22.163 回答
1

当他们必须登录时有一个相似之处:两者都需要输入凭据,通常是用户名/电子邮件和密码。因此,根据用户类型的 users 表和 foo_profiles 表和 bar_profiles 表也应该可以工作。

如果你真的想使用两个完全不同的表和它们的 MVC 堆栈,那么只需使用两个不同的控制器 FooUsers 和 BarUsers 并在每个控制器内部创建一个自定义的登录方法。

于 2012-06-21T09:21:44.870 回答
1

我之前通过编写从 BaseAuthenticate 扩展的自定义身份验证组件来完成此操作。只要他们实现了 authenticate() 方法,那么您就可以对每种不同类型的用户做任何您想做的事情。

在您的 AppController 中,您需要通过执行类似的操作来注册不同的组件

    public $components = array(
    "Session",
    "Auth" => array(
        'authenticate'      => array("UserType1", "UserType2"),
    )
);

查看食谱以了解其余部分。

于 2012-06-21T13:21:31.340 回答
0
You can have a look on this.
Define Model for both login member and then define table which you want to use for the user.
set variable in model.


class SearchedCategory extends AppModel {  
    var $name = 'SearchedCategory';  
    Var useTable = 'give your table name here.';
    var $primaryKey = 'id';


}
于 2012-11-26T05:49:59.123 回答