我想要一个改变密码模块。我想检查用户当前的密码是否与用户输入的密码相同。我已经定义了一个$ validate数组,如下所示。
`'old_password' => array(
'minLength' => array(
'rule' => array('minLength', 1),
'message' => 'Current Password is required'
),
'oldPass' => array(
'rule' => array('oldPass',array('old_password')),
'message' => 'Current Password is invalid'
)
),`
并定义了一种检查当前密码的方法
`function oldPass($data){
if(!empty($data['old_password'])) {
$valid = false;
$userData = $this->Auth->user(); // here I am getting error
$oldPass = Security::hash(Configure::read('Security.salt') . $data['old_password']);
if ($userData['User']['password'] == $oldPass) {
$valid = true;
}
return $valid;
} else {
return false;
}
}`
这是我得到的错误 未定义属性:User :: $ Auth [APP \ models \ user.php,第194行] 致命错误:在
中的非对象上调用成员函数user()基本上我只想将当前密码与用户输入的密码匹配
我正在使用 $ this-> User-> validates()进行验证。并获取错误消息我使用$ this-> set('validationErrorsArray',$ this-> User-> invalidFields());
请帮助我如何在模型中获取当前登录的用户ID。
答案 0 :(得分:23)
有一种干燥的方法:
$uid = CakeSession::read("Auth.User.id");
注意这只适用于CakePHP 2.x - 但仍然不应该这样做。 通常,您需要将所需的会话数据显式传递到模型层。
在3.x中,您无法再静态访问会话,您肯定需要将数据传递到模型层。
答案 1 :(得分:1)
如果您已经集成了auth组件,那么您必须通过以下方式获得当前用户:
$user = $this->Session->read("Auth.User");
$this->User->id = $user['id'];
$userData = $this->User->read();
答案 2 :(得分:-1)
您可以通过
获取用户名$_SESSION['Auth']['user']['username']