Tank Auth忘记密码不起作用

时间:2011-05-07 10:07:13

标签: codeigniter tankauth

我使用CodeIgniter + Tank Auth。只有代码http://localhost/XXXXXXXX/auth/forgot_password不起作用。 结果总是: “您的激活密钥不正确或已过期。请再次检查您的电子邮件并按照说明操作。”

注册和激活都可以。

4 个答案:

答案 0 :(得分:4)

一些可能的问题:

  • Cookie未正确设置。检查您的cookie设置,并进行测试以确保您可以设置和读取cookie。 (如果没有使用cookie进行重置,这可能无效)
  • 重置密码密钥已过期或未正确设置。在关注链接之前检查数据库以查看hte值是否正确,并检查Tank Auth中的$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);