2013-05-12 153 views
0

我是kohana 3.2的新手,我無法找到任何重新驗證驗證模塊的答案。 這是我的代碼和最初的原因,因爲我將用戶模型改爲擴展model_auth_user 驗證不是按照正確的方式完成的。密碼字段可以插入空的,沒有錯誤時拋出將被捕獲並同樣如果password_confirm和密碼字段是不同的:Kohana驗證模型

 public function action_new() 
     { 
     if ($_POST){ 
     try 
       { 
     $user = ORM::factory('user') 
     ->values(array(
      'username' => $_POST['username'], 
      'email' => $_POST['email'], 
       'password' => $_POST['password'], 
      'password_confirm' => $_POST['password_confirm'])); 

     $user->save(); 
     $user->add('roles', ORM::factory('role', array('name' => 'login'))); 
     $this->request->redirect('user/index'); 
     } 
     catch (ORM_Validation_Exception $e) 
     { 
      $errors = $e->errors(); 
     }  
} 

    $view = View::factory('user/new') 
    ->bind('errors',$errors);  //pass the info to the view 
    $this->response->body($view); //show the view 
    } 

感謝

+2

請顯示Model_User代碼。檢查它是否有正確的'rules()'方法。 – biakaveron 2013-05-13 05:51:59

+0

無法通過'rules()'創建密碼的規則,因爲它已經被散列。你需要從'Model_Auth_User'(或者你使用的類擴展Model_Auth_User)檢查(併發布)'create_user' – kero 2013-05-13 10:14:42

+0

使用Kohana 3.3。在你的情況下,你可能重新定義了一些原來的'Model_Auth_User'方法或屬性,並沒有包含父函數或代碼。 – 2013-05-13 11:25:58

回答

0

您可以覆蓋run_filter()方法來強制Kohana中忽略密碼濾波空值的情況。例如,把這段代碼到你User_Model:

protected function run_filter($field, $value) 
{ 
    if ($field === "password" AND $value === "") 
    return ""; 
    parent::run_filter($field, $value); 
} 
0

嘗試代碼示例從Model_Auth_User :: create_user();

$user->save(Model_User::get_password_validation($_POST)->rule('password', 'not_empty')); 

此驗證在過濾器(哈希密碼)之前執行。哈希之後 - 空白密碼變爲不空字符串。