CakePHP 2.4忘记密码
我刚刚开始使用CakePHP,我喜欢使用它!我已经创建了一个登录系统和注册系统,但是我真的很难处理“忘记密码”部分 我想在Users DB中使用tokenhash和到期日,这样就不会被滥用,用户需要输入用户名和电子邮件以获得通过电子邮件发送给他们的激活链接,其中包含新生成的tokenhash 有相当多的教程,但我发现大部分都适用于第一部分,例如,通过电子邮件发送激活链接/重置令牌和计时器,但所有教程似乎都无法更改密码 请帮助我,无论是从网上的工作教程或解决方案,适用于上述要求的事情 提前谢谢CakePHP 2.4忘记密码,cakephp,forgot-password,Cakephp,Forgot Password,我刚刚开始使用CakePHP,我喜欢使用它!我已经创建了一个登录系统和注册系统,但是我真的很难处理“忘记密码”部分 我想在Users DB中使用tokenhash和到期日,这样就不会被滥用,用户需要输入用户名和电子邮件以获得通过电子邮件发送给他们的激活链接,其中包含新生成的tokenhash 有相当多的教程,但我发现大部分都适用于第一部分,例如,通过电子邮件发送激活链接/重置令牌和计时器,但所有教程似乎都无法更改密码 请帮助我,无论是从网上的工作教程或解决方案,适用于上述要求的事情 提前谢谢 S
Steve下面是我为我的一个项目编写的代码,这可能会对您有所帮助 1-我创建了一个新表,其中包含每个用户的唯一令牌 表名:-用户\密码\重置 列:userclient\u id,令牌 2-电子邮件模板名称为:-change_password.html inside/webroot/template/change_password.html
public function login_send() {
$this->isLoggedIn(); //Check if the user is logged in
if($this->request->is('post')) { #if the form is submitted
$login = $this->data['User']['login'];
$conditions = array('User.login'=>$login);
if($this->User->hasAny($conditions)) {
$users = $this->User->find('first', array('conditions'=>$conditions));
#Generate the token
$token = md5(uniqid(rand(),true));
#Save token and other details in user_password_reset_links table
$users = $this->User->find('first', array('conditions'=>array('User.login'=>$login)));
$my_name = $users['User']['first_name'];
$reset_links = array();
$reset_links['UserPasswordReset']['userclient_id'] = $users['User']['client_id'];
$reset_links['UserPasswordReset']['token'] = $token;
$conditions = array('UserPasswordReset.userclient_id'=>$users['User']['client_id']);
if($this->UserPasswordReset->hasAny($conditions)) {
$user_id = $users['User']['client_id'];
$this->UserPasswordReset->updateAll(array('UserPasswordReset.token'=>"'$token'"), array("UserPasswordReset.userclient_id"=>"$user_id"));
} else {
$this->UserPasswordReset->create();
$this->UserPasswordReset->save($reset_links);
}
$password_reset_link = BASE_URL."users/reset_password/$token";
#Send Welcome Email
$mailContent = file_get_contents(BASE_URL . "templates/change_password.html");
$rootlink = BASE_URL;
$arrMail = array(
"{NICK}" => ucfirst($my_name),
"{rootlink}" => BASE_URL,
"{SITE_TITLE}" => SITE_TITLE,
"{PASSWORD_RESET_LINK}"=>$password_reset_link
);
$mails = explode(',', $users['User']['email']);
$msg = @str_replace(array_keys($arrMail), array_values($arrMail), $mailContent);
$data = array();
$data['to'] = @$mails[0];
$data['body'] = $msg;
$data['subject'] = SITE_TITLE.'- Reset Password.';
$this->send_mail($data);
$this->Session->setFlash('A password reset link has been sent to the email address.', 'default', array('class'=>'successMsg'));
$this->redirect(array('controller'=>'users', 'action'=>'login'));
exit;
} else {
$this->Session->setFlash('The Username entered is not registered with Captain Marketing.', 'default', array('class'=>'errorMsg'));
$this->redirect(array('controller'=>'users', 'action'=>'login_send'));
exit;
}
}
$this->set('title_for_layout', '-Send password reset link');
}
如果你想自己做的话,可以使用它或者查看代码。这个插件涵盖了你想要的。嗨,谢谢,迪内什,我喜欢这个脚本,你的重置密码视图/功能是如何工作的?这是我正在努力解决的主要问题,我喜欢你这样做,因为我正在生成一个唯一的令牌,将其与用户id一起保存在一个新表中,并向客户端发送一封重置密码令牌电子邮件。客户端在单击重置密码令牌时,用户来到我的站点。我正在检查令牌创建日期。如果未过期,则保存新密码,否则会通知用户令牌已过期。再试一次好的,有道理的抱歉我没有正确阅读代码:)我会尽快测试。谢谢