帐户激活,CodeIgniter

时间:2015-09-29 08:51:25

标签: php codeigniter email mysql-workbench activation

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

我有注册和登录工作。我正在使用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;
    }
}

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

第一

  

数据库   添加两列

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

注册成功后

  • 将一些randome添加到activation_token(md5或sha1(由您决定))
  • 使用当前时间戳(now())
  • 进行注册时添加时间
  

链接

链接应该是 我非常喜欢激活网址中的userid 因为它删除了链接重复。 http://sitename.com/activation/ {USER_ID} / {散列}

控制器中的

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;
  }

}
相关问题