我有一个Cake网站,它需要有两个单独的登录,每个登录都有自己的登录表单,看到不同的页面,有两个不同的表会很好,因为两种类型的人没有相似之处
每个登录表单仅供某些人使用,他们永远不会登录到其他表单,反之亦然。
另外,两个登录表之间有关系,这需要2个表?
这可能吗?
答案 0 :(得分:10)
首先,添加几个空的自定义身份验证对象。我们将重用FormAuthenticate使用的相同逻辑(即,使用POST数据为用户检查数据库),但只需在对象设置中更改模型(稍后)。
应用/控制器/组件/认证/ ModelOneAuthenticate.php 强>
<?php
App::uses('FormAuthenticate', 'Controller/Component/Auth');
class ModelOneAuthenticate extends FormAuthenticate {
}
应用/控制器/组件/认证/ 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
表中my_custom_username_field
中的用户名和some_password_field
中的密码,而第二个身份验证对象将使用标准{{model_twos
检查username
1}}和password
字段。
答案 1 :(得分: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';
}
答案 2 :(得分:1)
当他们必须登录时,有一个相似之处:两者都要求它输入凭据,通常是用户名/电子邮件和密码。因此,用户表和foo_profiles表以及bar_profiles表也应该起作用。
如果你真的想要使用两个完全不同的表和MVC堆栈,那么只需使用两个不同的控制器FooUsers和BarUsers,并在每个内部创建一个自定义的登录方法。
答案 3 :(得分:1)
我之前通过编写从BaseAuthenticate扩展的自定义身份验证组件来完成此操作。只要他们实现authenticate()方法,您就可以为每个不同类型的用户做任何你想做的事。
在AppController中,您需要通过执行类似
的操作来注册不同的组件 public $components = array(
"Session",
"Auth" => array(
'authenticate' => array("UserType1", "UserType2"),
)
);
查看其余部分的cookbook。
答案 4 :(得分: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';
}