账户激活,CodeIgniter

Posted

技术标签:

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

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

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

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

我不知道逻辑。我是否创建了一个函数,链接将直接转到该函数,然后从那里,它将我的表中的值更改为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;
    

【问题讨论】:

【参考方案1】:

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

【讨论】:

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

第一

数据库 添加两列

activation_tokenvarchar|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

以上是关于账户激活,CodeIgniter的主要内容,如果未能解决你的问题,请参考以下文章

账户激活,CodeIgniter

TRON账户地址激活问题解答

Windows 10的数字权利激活 需要登录微软账号吗?

重新激活的 PayPal 定期账户如何付款?

账户注册激活邮件及登入和注销

怎么激活office2016,永久使用?