CakePHP Auth登录无意义

时间:2014-07-28 13:04:49

标签: cakephp authentication login

我试图为我的用户创建一个简单的登录系统,但我无法弄清楚为什么它不会让我登录,Auth-> login()方法总会返回由于某种原因,FALSE(不正确的信息)可能是密码散列的东西。 我有cakePHP 2.5.2。

以下是我的问题的屏幕截图:ISSUE

UsersController 中的my beforeSave()方法:

public function beforeSave($options = array()) {
    $this->request->data['User']['password'] = Security::hash($this->request->data['User']['password']);
}

和login()方法:

function login() {
    if ($this->request->is('post')) {
        if ($this->Auth->login()) {
            $this->Session->setFlash(__('You\'ve successfully logged in.' . ' <b>' . $this->Session->read('User.login') . '</b>'), 'alert', array(
                'plugin' => 'BoostCake',
                'class' => 'alert-success'
            ), 'success');
            return $this->redirect($this->Auth->redirectUrl());
            ////  $this->redirect($this->Auth->redirectUrl());
        } else {
            // var_dump($this->Auth->user());
            $this->Session->setFlash(__('Sorry, the information you\'ve entered is incorrect.'), 'alert', array(
                'plugin' => 'BoostCake',
                'class' => 'alert-danger'
            ), 'danger');
        }
    }
}

这里是Auth组件:

public $components = array(
        'Session',
        'Auth' => array(
            'loginRedirect' => array('controller' => 'pages', 'action' => 'home'),
            'logoutRedirect' => array('controller' => 'pages', 'action' => 'home'),
            'loginAction' => array('controller' => 'users', 'action' => 'login'),
            'authError' => 'You are not authorized to access this page.',

            'authenticate' => array(
                        'Form' => array(
                            'userModel'=>'User',
                            'fields' => array(
                                'username' => 'login',
                                'password'=>'password')
                        )
        ),
            'flash' => array(
                'element' => 'alert',
                'key' => 'auth',
                'params' => array(
                    'plugin' => 'BoostCake',
                    'class' => 'alert-danger'
                )
            ),'authorize'=>array('Controller'),
        )
    ,'DebugKit.Toolbar'
    );

3 个答案:

答案 0 :(得分:0)

是的,这是不正确的我删除了一切,它的工作原理我不知道如何

答案 1 :(得分:0)

将您的beforeSave方法移动到模型,而不是控制器 保存数据时,Cake会在模型中插入数据之前查找应该运行的任何函数。

您还需要创建一个新用户(如果查看数据库,您会发现密码已存储为纯文本,因为之前的onSave中的哈希将永远不会被调用。

答案 2 :(得分:-1)

我认为您应该提供Security :: hash()函数blowfish或将应用程序的内部盐设置为true。

像这样:

public function beforeSave($options = array()) {
$this->request->data['User']['password'] = Security::hash($this->request->data['User']['password'], null, true); 
}

这就是不推荐使用的AuthComponent :: password()函数。

在我的Cake App中以这种方式进行测试,它的工作正常。

请参阅http://api.cakephp.org/2.4/class-Security.html#_hash

编辑: beforeSave()应该在用户的模型中,而不是在用户的控制器中