代码之家  ›  专栏  ›  技术社区  ›  aWebDeveloper

cakephp密码验证

  •  7
  • aWebDeveloper  · 技术社区  · 14 年前
    var $validate = array(
      'password' => array(
          'passwordlength' => array('rule' => array('between', 8, 50),'message' => 'Enter 8-50 chars'),
          'passwordequal' => array('checkpasswords','message' => 'Passwords dont match') 
      )
    );
    
    function checkpasswords()
    {
       return strcmp($this->data['Airline']['password'],$this->data['Airline']['confirm password']);
    }
    

    此代码不起作用,即使匹配,也会始终给出错误消息。此外,当我进行编辑时,由于没有密码字段,所以会出现以下错误。有什么办法吗

    Undefined index:  password [APP/models/airline.php, line 25]
    
    6 回复  |  直到 14 年前
        1
  •  12
  •   deceze    14 年前

    您使用的是authcomponent吗?请注意,它会散列所有输入的密码字段(但不是“密码确认”字段,请检查 debug($this->data) ,因此字段永远不会相同。 Read the manual and use AuthComponent::password 去检查一下。


    public $validate = array(
        'password' => array(
            'confirm' => array(
                'rule' => array('password', 'password_control', 'confirm'),
                'message' => 'Repeat password',
                'last' => true
            ),
            'length' => array(
                'rule' => array('password', 'password_control', 'length'),
                'message' => 'At least 6 characters'
            )
        ),
        'password_control' => array(
            'notempty' => array(
                'rule' => array('notEmpty'),
                'allowEmpty' => false,
                'message' => 'Repeat password'
            )
        )
    );
    
    public function password($data, $controlField, $test) {
        if (!isset($this->data[$this->alias][$controlField])) {
            trigger_error('Password control field not set.');
            return false;
        }
    
        $field = key($data);
        $password = current($data);
        $controlPassword = $this->data[$this->alias][$controlField];
    
        switch ($test) {
            case 'confirm' :
                if ($password !== Security::hash($controlPassword, null, true)) {
                    $this->invalidate($controlField, 'Repeat password');
                    return false;
                }
                return true;
    
            case 'length' :
                return strlen($controlPassword) >= 6;
    
            default :
                trigger_error("Unknown password test '$test'.");
        }
    }
    

    • password_control $this->User->save($this->data, true, array('field1', 'field2'))

        2
  •  5
  •   Web Developer    14 年前

    'passwordequal' => array('checkpasswords','message' => 'Passwords dont match') 
    

    'passwordequal'  => array('rule' =>'checkpasswords','message' => 'Passwords dont match')
    

    if(strcmp($this->data['Airline']['password'],$this->data['Airline']['confirm_password']) ==0 )
    {
        return true;
    }
    return false;
    
        3
  •  3
  •   Security Hound    12 年前

    class Adminpassword extends AppModel
    {
    
    
        public $name          =  'Admin';
                public $primaryKey    =  'id';
                public $validate = array(
                    'oldpassword' => array(
                            array(
                            'rule' => 'notEmpty',
                            'required' => true,
                            'message' => 'Please Enter Current password'
                            ),
                            array(
                            'rule' =>'checkcurrentpasswords',
                            'message' => 'Current Password does not match'
                            )
                    ),
                    'password' => array(
                            array(
                                    'rule' => 'notEmpty',
                                    'required' => true,
                                    'message' => 'Please Enter password'
                            ),
                            array(                              
                             'rule' => array('minLength', 6),
                             'message' => 'Passwords must be at least 6 characters long.',
                            )
                    ),
                    'cpassword' => array(
                            array(
                            'rule' => 'notEmpty',
                            'required' => true,
                            'message' => 'Please Enter Confirm password'
                            ),
                            array(
                                    'rule' => 'checkpasswords',
                                    'required' => true,
                                    'message' => 'Password & Confirm Password must be match.'
                            )
                    )
                );
    
       function checkpasswords()     // to check pasword and confirm password
        {  
            if(strcmp($this->data['Adminpassword']['password'],$this->data['Adminpassword']['cpassword']) == 0 ) 
            {
                return true;
            }
            return false;
        }
        function checkcurrentpasswords()   // to check current password 
        {
            $this->id = $this->data['Adminpassword']['id'];
            $user_data = $this->field('password');       
            //print_r(Security::hash($this->data['Adminpassword']['oldpassword'], 'sha1', true));
            if ($user_data == (Security::hash($this->data['Adminpassword']['oldpassword'], 'sha1', true)))
            { 
                 return true;
            }
            else
            {
             return false;
            }
        } 
    
    }
    
        5
  •  1
  •   Wuilliam    12 年前

    public function match($check, $with) {
        // Getting the keys of the parent field
        foreach ($check as $k => $v) {
            $$k = $v;
        }
    
        // Removing blank fields
        $check = trim($$k);
        $with = trim($this->data[$this->name][$with]);
    
        // If both arent empty we compare and return true or false
        if (!empty($check) && !empty($with)) {
            return $check == $with;
        }
    
        // Return false, some fields is empty
        return false;
    }
    

    public $validate = array(
        'password' => array(
            'match' => array(
                'rule' => array('match', 'password2'),
                'message' => 'Passwords doesnt match',
            ),
        ),
    );
    

    password2 password