2012-03-29 58 views
-1

僅僅爲了組織的緣故,我想爲驗證組件檢查使用不同的表,但它不起作用。雖然我可以初步狀態:CakePHP - 驗證組件,使用不同的表名和列名

$this->Auth->userModel = "CoreUsers"加上設置在loginAction我正確的MVC 作品看那個表只是爲了確認它的存在,但是登錄不工作,它只是不斷返回不正確的密碼。身份驗證組件中發生了某些情況;我不知道是什麼讓它失敗。當我將我的表格重命名爲「用戶」時,它可以工作。

另一部分是我寧願實際使用「電子郵件」而不是「用戶名」的列名稱,因爲這是我真正使用的。

我只是沒有找到一個完整的教程和參考集運氣成功與CakePHP 2.x成功。前進的方向是什麼?

參考文獻:

  1. 堆棧溢出問題How do I use a table other than "Users" for CakePHP's AuthComponent?

  2. 堆棧溢出問題CakePHP - 'AuthComponent' with a different model name (not 'User')

(我有一個尋找答案,但我從來沒有完全得到整個答案。)

回答

2

確保您的數據庫表「core_users」和模型「CoreUser」存在。

當您設置組件時,您可以在此處將登錄/註銷重定向。

var $components = array(
     "Auth" => array(
      'loginRedirect' => array('controller' => 'dashboard', 'action' => 'index'), 
      'logoutRedirect' => array('controller' => 'core_users', 'action' => 'login') 
      ), 
     "Session"); 

現在beforeFilter medhod你可以把下面的

function beforeFilter(){ 
     $this->Auth->authenticate = array(
     AuthComponent::ALL => array('userModel' => 'CoreUser', 'scope' => array("CoreUser.status" => 1), "fields" => array("username" => "email", "password" => "your_password_field"), 'Form', 'Basic' 
             ); 
} 

上面的例子,你可以忽略的狀態,如果你需要傳遞的登錄驗證u可以使用任何其他信息。現在你可以刪除'Basic',如果你只需要表單驗證。 我希望這會起作用。

+0

重定向工作正常,謝謝。但登錄失敗,只是覺得這是一個不正確的密碼/電子郵件組合。 – Emotinator 2012-03-29 16:49:40

+0

這個工作後,我發現我的'userModel'是複數,當它應該是單數。謝謝。 – Emotinator 2012-03-29 17:09:05

1

首先,型號名稱通常是單數。你確定你的意思不是CoreUser這將看在core_users表?

其次,您可以使用email字段而不是username,方法是在您的身份驗證設置中設置fields密鑰。

public $components = array(
    'Auth' => array(
     'authenticate' => array(
      'Form' => array(
       'userModel' => 'CoreUser', 
       'fields' => array('username' => 'email') 
      ) 
     ) 
    ) 
); 

有關更多信息,請參見the book

+0

至於模型名稱,大多數示例和CakePHP教程的模型名稱都是單數。但我會仔細檢查。 – Emotinator 2012-03-29 16:22:42

+0

哦,我這個人可怕的錯字!是的,這就是我的意思。您的帖子顯示覆數。 – jeremyharris 2012-03-29 16:24:51

+0

我錯過了實際'userModel'參考的亮點應該是單數,我的表格被正確命名,但是那條線我錯了。謝謝。 – Emotinator 2012-03-29 17:10:15