【问题标题】:Account activation, CodeIgniter账户激活,CodeIgniter
【发布时间】:2015-12-26 16:23:10
【问题描述】:

我想创建一个帐户激活,在注册后,一个链接将发送到管理员(或一个)电子邮件,管理员只需单击该链接即可激活该帐户。

我的注册和登录工作正常。我正在使用 MySQL Workbench,并且在我的帐户表中有一个“标志”或更确切地说只是一个字段(名为 user_login)来判断帐户是启用还是禁用,注册后默认禁用。

我卡住并通过电子邮件发送链接,我不知道从哪里开始。我要发送的链接将包含一个随机字符串,并将发送给管理员,例如abc/123/random?stringis=1234。然后管理员只需打开他的电子邮件并单击字符串,然后该特定用户的帐户就会被激活。我找到了thisthis,但这只是关于如何通过电子邮件发送链接。

我不知道逻辑。我是否创建了一个函数,链接将直接转到该函数,然后从那里,它将我的表中的值更改为enabled 或我称之为的任何名称,以便用户的帐户被视为已激活?那么我需要创建一个新字段来匹配随机生成的字符串吗?

主要想法是我尝试像那些典型的网站那样做管理员。

编辑:

在控制器中

public function activate_user($activation_code)
{
    $result = $this->home_model->activate($activation_code);

    if($result != FALSE)
    {
        echo "You have activated :".$result[0]->user_id.".";
    }
    else
    {
        echo "Activation failed, something went wrong.";
    }
}

在模型中:

public function activate($activation_link)
{
    $this->db->select('*');
    $this->db->from('user_login');
    $this->db->where('activation_link', $activation_link);
    $query = $this->db->get();

    if($query->num_rows() == 1)
    {
        return $query->result();
    }
    else
    {
        return FALSE;
    }
}

【问题讨论】:

    标签: php codeigniter email mysql-workbench activation


    【解决方案1】:

    为此,您需要在名为activation_link的表中再添加一个字段,当用户在站点中注册时,生成随机字符串并将其存储在activation_link 中并将链接发送给用户,因此一旦用户返回,然后检查链接并激活那个用户。

    【讨论】:

    • 哦,好的,我先试试。
    • 嗯...如果您对此有任何疑问,请告诉我。
    • 好的等等,但是我如何编码包含参数的链接?因为我想在我为“激活”而创建的新函数中访问它。
    • 如果你已经添加了登录控制器的代码和激活方法,那么你的 url 将是http://domain.com/login/activate/ {youractivationlinkcode} 并且激活函数应该是function activate($activationLinkCode)
    • 我对你最后的评论有点困惑,但我编辑了我所做的。所以你说{youractivationlinkcode} 是我可以得到我的代码的地方吗?我不必使用$_GET之类的东西?代码会自动传递给函数吗?
    【解决方案2】:

    第一

    数据库 添加两列

    • activation_token{varchar|255}
    • activation_time{日期时间}

    注册成功后

    • 在activation_token(md5或sha1(由你决定))中添加一些随机数
    • 如果注册使用当前时间戳添加时间(now())

    链接

    链接应该是 我非常喜欢激活 url 中的用户 ID 因为它删除了链接重复。 http://sitename.com/activation/{user_id}/{hash}

    在控制器中

    public function activation($user_id,$hash)
    {
    
      $timeOfexpiration = 3600;
    
      $data = $this->model->get_data($id,$hash);
    
      if(!$data)
      {
        return false
      }
    
        //if user found 
        //check expiration of linke
        //like
    
      if($data['activation_time']+$timeOfexpiration < now())
      {
        return true;
      }
      else
      {
        return false;
      }
    
    }
    

    【讨论】:

    • 3600 秒表示 1 分钟。它在几秒钟内。这取决于你想要多少。最佳做法是为此定义常量。
    • 24小时使用60*60*24
    猜你喜欢
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 2012-12-04
    • 2011-01-28
    • 2012-08-20
    • 2013-08-18
    • 1970-01-01
    相关资源
    最近更新 更多