gpt4 book ai didi

cakephp - 有没有更好的方法来使用 Auth 在 cakephp 中更改用户密码?

转载 作者:行者123 更新时间:2023-12-03 21:02:16 25 4
gpt4 key购买 nike

我正在自己学习cakephp。我试图创建一个具有 changepassword 功能的用户 Controller 。它有效,但我不确定这是否是最好的方法,我无法在谷歌上搜索有用的教程。
这是我的代码:

class UsersController extends AppController {

var $name = 'Users';

function login() {
}

function logout() {
$this->redirect($this->Auth->logout());
}

function changepassword() {
$session=$this->Session->read();
$id=$session['Auth']['User']['id'];
$user=$this->User->find('first',array('conditions' => array('id' => $id)));
$this->set('user',$user);
if (!empty($this->data)) {
if ($this->Auth->password($this->data['User']['password'])==$user['User']['password']) {
if ($this->data['User']['passwordn']==$this->data['User']['password2']) {
// Passwords match, continue processing
$data=$this->data;
$this->data=$user;
$this->data['User']['password']=$this->Auth->password($data['User']['passwordn']);
$this->User->id=$id;
$this->User->save($this->data);
$this->Session->setFlash('Password changed.');
$this->redirect(array('controller'=>'Toners','action' => 'index'));
} else {
$this->Session->setFlash('New passwords differ.');
}
} else {
$this->Session->setFlash('Typed passwords did not match.');
}
}
}
}

password 是旧密码,passwordn 是新密码,password2 是重新输入的新密码。
有没有其他更酷的方法来做蛋糕?

最佳答案

我看到您在 Controller 中验证和操作数据。在模型中执行此操作通常是更好的做法。几天前我实现了类似的功能。我的 change_password()方法看起来有点像这样:

# app/controllers/users_controller.php
function change_password() {
if (!empty($this->data)) {
if ($this->User->save($this->data)) {
$this->Session->setFlash('Password has been changed.');
// call $this->redirect() here
} else {
$this->Session->setFlash('Password could not be changed.');
}
} else {
$this->data = $this->User->findById($this->Auth->user('id'));
}
}

这是与该方法一起使用的 View 的精简版本:
# app/views/users/change_password.ctp
echo $this->Form->create('User');
echo $this->Form->input('id');
echo $this->Form->input('current_password');
echo $this->Form->input('password1');
echo $this->Form->input('password2');
echo $this->Form->end('Submit');

做一些有趣的事情的代码在模型中。我将表单中的字段添加到 validate属性(property)并写道 custom validation methods .这允许我在应用程序的任何其他位置使用 password1 和 password2 字段,例如,在注册表单上。
# app/models/user.php
var $validate = array(
'current_password' => array(
'rule' => 'checkCurrentPassword',
'message' => '...'
),
'password1' => array(
'rule' => 'checkPasswordStrength',
'message' => '...',
),
'password2' => array(
'rule' => 'passwordsMatch',
'message' => '...',
)
);

最后,在 beforeSave() 我设置的模型回调 passwordpassword1 的哈希值准备要存储在数据库中的数据。

关于cakephp - 有没有更好的方法来使用 Auth 在 cakephp 中更改用户密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2868665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com