【问题标题】:Kohana auth modelKohana 身份验证模型
【发布时间】:2013-05-12 21:16:56
【问题描述】:

我是 kohana 3.2 的新手,我找不到任何重新分级身份验证模块的答案。 这是我的代码,自从我将用户模型更改为扩展 model_auth_user 以来,出于某种原因 验证没有正确完成。密码字段可以插入空,如果 password_confirm 和密码字段不同,则不会捕获任何异常:

       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
     }  

谢谢

【问题讨论】:

  • 请显示 Model_User 代码。检查它的rules() 方法是否正确。
  • 密码规则不能通过rules()创建,因为那样它就已经被散列了。您需要从 Model_Auth_User(或您使用的扩展 Model_Auth_User 的类)检查(并发布)create_user
  • 使用 Kohana 3.3。在您的情况下,您可能重新定义了一些原始的 Model_Auth_User 方法或属性,并且没有包含父函数或属性代码。

标签: kohana


【解决方案1】:

您可以覆盖 run_filter() 方法来强制 Kohana 在空值的情况下忽略密码过滤。例如,将此代码放入您的 User_Model:

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

【讨论】:

    【解决方案2】:

    尝试来自 Model_Auth_User::create_user() 的代码示例;

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

    此验证在过滤器(散列密码)之前执行。散列后 - 空白密码变为非空字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 1970-01-01
      • 2012-05-07
      • 2018-04-25
      • 2011-05-25
      相关资源
      最近更新 更多