我有一個Cake網站,它需要有兩個單獨的登錄,每個登錄表單都會有自己的登錄表單並且看到不同的頁面,因此有兩個不同的表格會很好,因爲它們之間沒有相似之處兩種人。CakePHP 2個單獨的登錄表
每個登錄表單只會被某些人使用,他們將永遠不會登錄到其他表單,反之亦然。
此外,兩個登錄表之間有一個關係,它需要2個表?
這可能嗎?
我有一個Cake網站,它需要有兩個單獨的登錄,每個登錄表單都會有自己的登錄表單並且看到不同的頁面,因此有兩個不同的表格會很好,因爲它們之間沒有相似之處兩種人。CakePHP 2個單獨的登錄表
每個登錄表單只會被某些人使用,他們將永遠不會登錄到其他表單,反之亦然。
此外,兩個登錄表之間有一個關係,它需要2個表?
這可能嗎?
首先,添加幾個空的自定義身份驗證對象。我們將重用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
用戶名和密碼,而第二個將使用標準username
和password
領域檢查model_twos
。
感謝您的支持!到目前爲止,我已經完成了所有的代碼並沒有錯誤,但是當我去一個受限制的頁面時,它會嘗試去用戶/登錄時,我已經說過要去代理/登錄 - 唉想法爲什麼?這是我的:http://codepad.org/zvBeJFEX – 472084
你需要設置loginRedirect屬性:http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html# AuthComponent :: $ loginRedirect – jeremyharris
我有這樣的設置:http://codepad.org/zvBeJFEX - 我需要將它添加到新創建的auth類,而不是某種方式嗎? – 472084
當他們必須登錄時有相似性:兩者都會要求它輸入憑據,通常是用戶名/電子郵件和密碼。所以用戶表和foo_profiles表和bar_profiles表也取決於用戶類型。
如果你真的想用兩個不同的表和他們的MVC堆棧,那麼只需使用兩個不同的控制器FooUsers和BarUsers,並在每個控制器內創建一個定製的登錄方法。
我之前通過編寫擴展自BaseAuthenticate的自定義身份驗證組件來完成此操作。只要他們實現authenticate()方法,那麼你就可以爲每種不同類型的用戶做任何你想做的事情。
在你的AppController你需要做類似
public $components = array(
"Session",
"Auth" => array(
'authenticate' => array("UserType1", "UserType2"),
)
);
退房的cookbook爲它的其餘部分進行註冊的不同組件。
要做到這一點最簡單的方法是隻爲每個登錄類型不同的會話密鑰:
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';
}
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';
}
這看起來像什麼,我需要但對於舊版本的蛋糕,說不定@deizel會看到這個:) – 472084
相同的概念,除了'identify'被移到了authenticate對象上,並被稱爲'authenticate'(或者''特別是'BaseAuthenticate'上的'_findUser'方法)。 – jeremyharris
所以,只要將'identify'改爲'authenticate'? http://codepad.viper-7.com/1BX9fE – 472084