我正在處理一些管理功能到我的網站,其中具有管理員權限的用戶可以爲給定的用戶ID打開表單。從這種形式他們可以改變用戶權限,修改用戶密碼或其他方式。防止用戶管理頁面上的密碼覆蓋
但是,當從模型構造表單時,密碼字段會從數據庫中提取散列密碼並填充密碼字段。因此,當管理員保存表單時,散列密碼將被視爲純文本,並因此再次散列,從而覆蓋原始密碼。
我需要的是一些允許管理員用戶更改表單的方法,但只有在密碼被更改的情況下才對密碼進行密碼散列和更新。
我的想法是,構建形式設置密碼爲空:
視圖/用戶/ edit.ctp:
echo $this->Form->input('User.password',array(
'value' => '',
'type' => 'password',
'autocomplete' => 'off'
)
);
而且具有某種對save
檢查跳過密碼;但這是我卡住的地方。
控制器/ userscontroller.php
public function edit($id = null)
{
$this->User->id = $id;
if ($this->request->is('get'))
{
$this->request->data = $this->User->read();
} else {
//Something here????
if ($this->User->save($this->data))
{
$this->Session->setFlash('Your user has been updated.');
$this->redirect(array('action' => 'index'));
} else
{
$this->Session->setFlash('Unable to update your user.');
}
}
$this->set('groups',$this->User->Group->find('list'));//, array('fields' => array('id', 'name'))));
$this->set('sites',$this->User->Site->find('list'));//, array('fields' => array('id', 'name'))));
}
如何檢查並防止口令時,有沒有變化更新?
決定解決方案:
按規定我用了第二種形式是在同一頁上的答案重新使用註冊驗證用戶經歷。當更新站點/組權限時,用戶通過一個表單發送,而通過另一個表單發送密碼。
是的,我承認我可以做很多解決方法。我對用戶的手動更改進行了驗證,並且現在已開始在管理員表單上工作,因爲這是我從過去僱員繼承的一個網站,我正在努力吸收這些網站。感謝您的建議 – Grambot
www.dereuromark.de/2011/08/25/working-with-passwords-in-cakephp/也可能有幫助 - 您不一定需要第二種表單/操作。 – mark