CakePHP 1.3アプリケーションでトークンを使用し、ユーザーがパスワードを変更できる以下の機能があります。パスワードが実際に変更されないことを除いて、すべてうまくいくようです:/問題が何であるか?CakePHPパスワードリセットでパスワードを変更しない
function admin_changepassword ($token = null)
{
// If has a token or form has been submitted
if (!empty($token) || !(empty($this->data)))
{
$user = $this->User->find('first',array("MD5(User.email + '".Configure::read('Security.salt')."')"=>$token));
if (empty($user))
{
$this->redirect(array('admin'=>false,'controller'=>'pages','action'=>'display','home'));
$this->Session->setFlash('Invalid token');
}
else
{
$this->set('user',$user);
if (!empty($this->data['User']['password']))
{
$user['User']['password'] = $this->data['User']['password'];
$this->User->save($this->data);
$this->Session->setFlash('Your password has been changed! Please log in.');
$this->redirect(array('admin'=>true,'controller' => 'users', 'action' => 'login'));
}
}
}
else
{
$this->redirect(array('admin'=>false,'controller'=>'home','action'=>'display','home'));
$this->Session->setFlash('No token');
}
}
あなたは、そのクエリとの比較のために潜在的に巨大に無駄な操作をすべてのユーザーのすべての単一のパスワードをハッシュするデータベースを求めているに役立つかもしれません。 – deceze
私は理解していないので、これをさらに説明できますか?パスワードが変更されない理由は? – Cameron
あなたは 'どこMD5(パスワード...)= 'somestring''を照会しています。つまり、データベースはすべての行で 'MD5(password ...)'を実行し、 'somestring 'と比較する必要があります。とにかくこのトークンは何であるはずですか?私はそれがあなたの問題だとは思わない。 *あなたの問題は何ですか?それは何をするためのものか? – deceze