在 codeigniter 中忘记密码
Forgot password in codeigniter
我需要在登录页面实现忘记密码。首先我验证电子邮件然后生成一个字符串,然后发送一个带有密钥的 link 和电子邮件到特定的邮件。
我知道如何重置,但发生了什么收到 link 到该邮件
$message= "<a href='".base_url()."user/reset_pass/$key/$email'>";
这是我提供的link。
我不会尝试提供电子邮件地址作为重置密码的获取方法。
您只需将散列键作为 url 发送即可完成您的工作。而这些散列键将作为令牌数据进行验证,在有限的时间内有效。而已 。
基本流程应该是这样的:
- 用户点击忘记密码
- 验证数据库中是否存在电子邮件或用户 ID
- 创建
key
- 更新
key
和 time
数据库中的用户行(为此需要 2 列)
创建包含 link 的电子邮件,但仅使用 KEY
电子邮件地址是不必要的,可能会被嗅探,这可能会被用来破坏此过程。
<a href='".base_url()."user/reset_pass/$key'>
用户在他们收到的电子邮件上点击 link
- 运行用户控制器 reset_pass 方法并将密钥作为参数传递
- 在用户 table 中搜索密钥
如果没有找到
- 将用户扔到某个地方,可能是 hack
如果找到但超过时限
- 使用新密钥生成另一封电子邮件
- 用新的
key
和 time
更新用户 table
如果找到并且时间在限制范围内
- 抛出用户重设密码查看
密码重置后
- 更新用户 table 将
key
和 time
列设置为 NULL
首先你需要检查当用户点击忘记密码时会话是否存在。
如果否,则设置您将从用户那里获取的电子邮件的验证方法。
像这样:
$this->form_validation->set_rules('email', 'Email', 'required|valid_email|callback_email_exists');
在email_exists
方法中,检查用户是否存在给定的电子邮件ID。
如果用户存在则创建邮件 function.In 消息发送 link 以重置密码。
$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') .'.');
并发送邮件。
当用户点击重置时 link 该方法将再次检查 session.if 会话是否存在 重定向到主页,否则从 url.[=16= 获取第三和第四段]
$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
进行比较。如果两者匹配,则为用户提供重置字段和密码确认密码。
如果两者都是密码match.Update密码。
我需要在登录页面实现忘记密码。首先我验证电子邮件然后生成一个字符串,然后发送一个带有密钥的 link 和电子邮件到特定的邮件。
我知道如何重置,但发生了什么收到 link 到该邮件
$message= "<a href='".base_url()."user/reset_pass/$key/$email'>";
这是我提供的link。
我不会尝试提供电子邮件地址作为重置密码的获取方法。 您只需将散列键作为 url 发送即可完成您的工作。而这些散列键将作为令牌数据进行验证,在有限的时间内有效。而已 。
基本流程应该是这样的:
- 用户点击忘记密码
- 验证数据库中是否存在电子邮件或用户 ID
- 创建
key
- 更新
key
和time
数据库中的用户行(为此需要 2 列) 创建包含 link 的电子邮件,但仅使用
KEY
电子邮件地址是不必要的,可能会被嗅探,这可能会被用来破坏此过程。<a href='".base_url()."user/reset_pass/$key'>
用户在他们收到的电子邮件上点击 link
- 运行用户控制器 reset_pass 方法并将密钥作为参数传递
- 在用户 table 中搜索密钥
如果没有找到
- 将用户扔到某个地方,可能是 hack
如果找到但超过时限
- 使用新密钥生成另一封电子邮件
- 用新的
key
和time
更新用户 table
如果找到并且时间在限制范围内
- 抛出用户重设密码查看
密码重置后
- 更新用户 table 将
key
和time
列设置为 NULL
首先你需要检查当用户点击忘记密码时会话是否存在。 如果否,则设置您将从用户那里获取的电子邮件的验证方法。
像这样:
$this->form_validation->set_rules('email', 'Email', 'required|valid_email|callback_email_exists');
在email_exists
方法中,检查用户是否存在给定的电子邮件ID。
如果用户存在则创建邮件 function.In 消息发送 link 以重置密码。
$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') .'.');
并发送邮件。
当用户点击重置时 link 该方法将再次检查 session.if 会话是否存在 重定向到主页,否则从 url.[=16= 获取第三和第四段]
$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
进行比较。如果两者匹配,则为用户提供重置字段和密码确认密码。
如果两者都是密码match.Update密码。