我试图为我的用户创建一个简单的登录系统,但我无法弄清楚为什么它不会让我登录,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'
);
答案 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()应该在用户的模型中,而不是在用户的控制器中