账户激活,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的主要内容,如果未能解决你的问题,请参考以下文章