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

时间:2011-04-23 02:23:48

标签: cakephp authentication

我想要一个改变密码模块。我想检查用户当前的密码是否与用户输入的密码相同。我已经定义了一个$ 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。

3 个答案:

答案 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']