我使用CodeIgniter + Tank Auth。只有代码http://localhost/XXXXXXXX/auth/forgot_password不起作用。 结果总是: “您的激活密钥不正确或已过期。请再次检查您的电子邮件并按照说明操作。”
注册和激活都可以。
答案 0 :(得分:4)
一些可能的问题:
$config['forgot_password_expire']
。您可能会链接到电子邮件中的错误网址。 这看起来不正确:
http://localhost/XXXXXXXX/auth/forgot_password
应该是这样的:
http://localhost/auth/forgot_password/XXXXXXXX
不要阻止你使用Tank Auth,但是如果你还处于早期阶段,我可以建议尝试使用Ion_Auth。我相信它会在PyroCMS中使用,如果这会增加任何功劳。
答案 1 :(得分:2)
如果您的网址中的XXXXXXXX表明您在/ auth /之前有额外的URI细分,则应更改此信息:
function reset_password()
{
$user_id = $this->uri->segment(3);
$new_pass_key = $this->uri->segment(4);
到此:
function reset_password()
{
$user_id = $this->uri->segment(4);
$new_pass_key = $this->uri->segment(5);
请注意$ this-> uri-> segment()中的不同数字。使用/ auth /之前的额外段,您的用户ID和激活码将作为参数传递到第4和第5段(而不是Tank Auth假设的第3和第4段)。
答案 2 :(得分:1)
它可能是数据库中的时间戳 在用户模型函数“can_reset_password”中 使用UNIX_TIMESTAMP(new_password_requested)
你可以回显$ user_id和$ new_pass_key如果它们是正确的那么问题是时间比较。 修复网址以始终获取最后两个段
$break =$this->uri->total_segments();
$new_pass_key= $this->uri->segment($break);
$user_id= $this->uri->segment($break-1);
为时间戳尝试使用用户模型中的函数reset_password
function reset_password($user_id, $new_pass, $new_pass_key, $expire_period = 900)
{
$this->load->helper('date');
$this->db->set('password', $new_pass);
$this->db->set('new_password_key', NULL);
$this->db->set('new_password_requested', NULL);
$this->db->where('id', $user_id);
$this->db->where('new_password_key', $new_pass_key);
$this->db->where('UNIX_TIMESTAMP(new_password_requested) >=',mysql_to_unix( time() - $expire_period));
$this->db->update($this->table_name);
return $this->db->affected_rows() > 0;
}
答案 3 :(得分:1)
在主index.php中,您必须定义一个时区。例如:
date_default_timezone_set('Europe/Paris');
这将确保以下检查包含具有相同时区的所有日期
$this->db->where('UNIX_TIMESTAMP(new_password_requested) >', time() - $expire_period);