在codeigniter中忘记密码

时间:2015-08-06 10:18:52

标签: php codeigniter forgot-password

我需要在登录页面上实现忘记密码。首先我验证电子邮件然后生成一个字符串,然后发送带有密钥和电子邮件的链接到特定邮件。

我知道如何重置但发生的事情会收到该邮件的链接

$message= "<a href='".base_url()."user/reset_pass/$key/$email'>";

这是我提供的链接

请提出建议

3 个答案:

答案 0 :(得分:1)

我不会尝试将电子邮件地址作为重置密码的get方法。 您只需将散列密钥作为网址发送即可完成工作。并且这些散列密钥将验证为令牌数据,这将在有限的时间内激活。就是这样。

答案 1 :(得分:1)

基本流程应该是这样的:

  • 用户点击忘记密码
  • 验证数据库
  • 上是否存在电子邮件或用户ID
  • 创建key
  • 在DB中的用户行上更新keytime(此处需要2列)
  • 创建包含链接但仅包含KEY电子邮件地址的电子邮件是不必要的,可能会被嗅探,可能会影响此过程。

    <a href='".base_url()."user/reset_pass/$key'>

用户点击他们收到的电子邮件上的链接

  • 运行用户控制器reset_pass方法,并作为param
  • 传递密钥
  • 在用户表中搜索密钥

如果没有找到

  • 将用户扔到某处,可能是黑客

如果找到但超出时间限制

  • 使用新密钥生成另一封电子邮件
  • 使用新的keytime
  • 更新用户表

如果找到并且时间在限制范围内

  • 向用户投掷重置密码视图

密码重置后

  • 将用户表集keytime列更新为NULL

答案 2 :(得分:1)

首先,当用户点击忘记密码时,您需要检查会话是否存在。 如果否,则设置您将从用户处获取的电子邮件的验证方法。

像这样:

$this->form_validation->set_rules('email', 'Email', 'required|valid_email|callback_email_exists');

email_exists方法中,使用给定的电子邮件ID检查用户是否存在。

如果用户存在则创建邮件功能。在邮件发送链接中重置密码。

$slug = md5($user->user_id . $user->email . date('Ymd'));
    $this->email->message('To reset your password please click the link below and follow the instructions:

'. site_url('forgotpassword/reset/'.$user->user_id .'/'. $slug) .'
If you did not request to reset your password then please just ignore this email and no changes will occur.
Note: This reset code will expire after '. date('j M Y') .'.');

发送邮件。

当用户点击重置链接时,该方法将再次检查session.if会话存在重定向使用到主页,否则从网址获取第三和第四段。

$user_id = $this->uri->segment(3);
if(!$user_id) show_error('Invalid reset code.');
$hash = $this->uri->segment(4);
if(!$hash) show_error('Invalid reset code.');

从url.again获取用户ID从db值中创建$slug并将其与url $slug进行比较。如果两者匹配,则向用户提供带密码和确认密码的重置字段。

如果两个密码都匹配。请更新密码。