在用户模型cakephp中获取$ this-> Auth-> user('id')

dee*_*eep 2 authentication cakephp

我想要一个changepassword模块.我想检查用户当前的密码是否与用户输入的密码相同.我已经定义了一个$ 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'
                )
            ),`
Run Code Online (Sandbox Code Playgroud)

并定义了一种检查当前密码的方法

`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;
        }

    }`
Run Code Online (Sandbox Code Playgroud)

这是我得到Undefined属性的错误:User :: $ Auth [APP\models\user.php,第194行]致命错误:在非对象上调用成员函数user()

基本上我只想将当前密码与用户输入的密码相匹配

我使用$ this-> User-> validates()来验证.并获取错误消息我正在使用$ this-> set('validationErrorsArray',$ this-> User-> invalidFields());

请帮助我如何在模型中获取当前登录的用户ID.

mar*_*ark 23

有一种干燥的方法:

$uid = CakeSession::read("Auth.User.id");
Run Code Online (Sandbox Code Playgroud)

请注意,这仅适用于CakePHP 2.x - 仍然不应该这样做.通常,您将所需的会话数据显式传递到模型层.

在3.x中,您无法再静态访问会话,您肯定需要将数据传递到模型层.

  • 只是不要忘记在模型文件的顶部添加`App :: uses('CakeSession','Model/Datasource')`. (5认同)