2013-10-31 228 views
0

我做了很多的研究,隨後許多不同的例子,但仍無法得到它的正常運行。登錄後註冊用戶CakePHP中

因此,這裏是從註冊控制器動作的一部分:

if(!empty($this->request->data)){ 

     $this->request->data['Company']['start_date']= date("Y-m-d"); 
     unset($this->Company->User->validate['company_id']); 
     if($this->Company->saveAssociated($this->request->data)){ 
       $user = $this->request->data['User']; 
       $data['User']['password'] = $user[0]['password']; 
       $data['User']['email'] = $user[0]['email']; 
      if($this->Auth->login($data)){ 
       $this->redirect($this->Auth->redirect(array('controller'=>'customers', 'action'=>'index'))); 
      }... 

所以用戶保存和用戶的電子郵件的一個新的數組並創建密碼。然後,它被傳遞到$這個 - > Auth->登錄。登錄似傳,但下面的錯誤是重定向到客戶控制器:

Notice (8): Undefined index: role [APP\Controller\CustomersController.php, line 32] 
Notice (8): Undefined index: role [APP\Controller\CustomersController.php, line 36] 

即使角色字段是自動設置爲用戶創造經理。 這裏是CustomerController的樣子:

公共職能isAuthorized($用戶){

if($user['role'] == 'manager'){ 
    return true;} 
if (in_array($this->action, array('add', 'edit', 'index', 'view', 'delete', 'users'))){ 
    if($user['role'] != 'manager'){ 
     return false; 
    }}return true;} 

任何幫助是非常讚賞。

回答

0

檢查文檔和AuthComponent::login()

當傳遞用戶數據AuthComponent::login(),要登錄用戶的來源,但沒有認證將要發生! 「記錄在」在這種情況下是指,只要被存儲在會話中的數據,並在以下的用戶被視爲在病例數據登錄請求存在於會議(在由組件所使用的特定的鍵),即你甚至可以通過123456,用戶將被視爲登錄。

另一方面進行身份驗證會導致數據庫查找,其中所有的用戶數據將被提取並因此被存儲在會話中。

所以,因爲你沒有把它遞給AuthComponent::login()role字段不可,你唯一通過emailpassword,因此這些都被後來獲得的唯一領域。順便說一句,做這樣的手動登錄時不提供密碼!你不想在會議中攜帶這些敏感信息!

要解決這個問題,不是太通role場,或撥打AuthComponent::login(),而完全不經過任何數據(請確保您使用的認證形式,使所用的請求傳遞的數據),所以它會驗證用戶並從數據庫中獲取其數據。

另請參見http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html