AI智能
改变未来

thinkphp实现用户注册时邮箱激活

有些网站在注册的时候,会向用户的邮箱发送邮件,点击邮件中的链接激活账户,基本原理就是在注册的时候(即点击发送邮件的时候),先把用户的信息存进数据库,另外还有一个激活状态的字段(默认是未激活)点击邮件中的链接,验证通过之后,该字段状态会改为已激活,邮件中的链接信息包括:用户id(只要是在数据库中能找到对应的数据就行,不一定是id),激活码,点击这个链接之后,会把这些数据传到我们写好的一个方法里面,只要在这个方法里面验证即可。

业务流程

1、用户提交注册信息
2、写入数据库,此时账号未激活
3、将用户名密码或其他标识字符进行加密构成激活码
4、将激活码和用户的id组成URL发送到邮箱
5、用户登陆邮箱。点击URL激活
6、验证激活码,正确就激活账号,更改激活状态

数据库设计

发送邮件

发送邮件之前需要加载phpemailer类,可以看我上一篇文章“Thinkphp5+PHPMailer实现发送邮件”

public function index(){$toemail = \'[email protected]\';	//这里写的是收件人的邮箱$active_url = \"http://test.zxf/index/sendmail/active.html?id=1&active_key=123\";	//发送到邮件中的url,就是验证信息的地址$body =  \"亲爱的\".$toemail.\":<br/>感谢您在我站注册了新帐号。<br/>请点击链接激活您的帐号。<br/><a href=\'\".$active_url.\"\' target= \'_blank\'>点击激活</a><br/>如果以上链接无法点击,请将它复制到你的浏览器地址栏中进入访问,该链接24小时内有效。\";$mail=new Phpmailer();$mail->isSMTP();	// 使用SMTP服务(发送邮件的服务)$mail->CharSet = \"utf8\";	// 编码格式为utf8,不设置编码的话,中文会出现乱码$mail->Host = \"smtp.qq.com\";	// 发送方的SMTP服务器地址$mail->SMTPAuth = true;	// 是否使用身份验证$mail->Username = \"[email protected]\";	// 申请了smtp服务的邮箱名(自己的邮箱名)$mail->Password = \"hcstaffeplbcjgii\";	// 发送方的邮箱密码,不是登录密码,是qq的第三方授权登录码,要自己去开启(之前叫你保存的那个密码)$mail->SMTPSecure = \"ssl\";	// 使用ssl协议方式,$mail->Port = 465;	// QQ邮箱的ssl协议方式端口号是465/587$mail->setFrom(\"[email protected]\",\"测试发件人\");	// 设置发件人信息,如邮件格式说明中的发件人,$mail->addAddress($toemail,\'测试收件人\');	// 设置收件人信息,如邮件格式说明中的收件人$mail->addReplyTo(\"[email protected]\",\"Reply\");	// 设置回复人信息,指的是收件人收到邮件后,如果要回复,回复邮件将发送到的邮箱地址$mail->Subject = \"这是一个测试邮件\";	// 邮件标题$mail->Body = $body;// 邮件正文$mail->CharSet = \"UTF-8\";   //字符集$mail->Encoding = \"base64\"; //编码方式$mail->IsHTML(true);//支持html格式内容if(!$mail->send()){	// 发送邮件echo \"Message could not be sent.\";echo \"Mailer Error: \".$mail->ErrorInfo;	// 输出错误信息}else{echo \'\';return \'发送成功\';}}

发送成功之后,邮件内容,注意,如果发送之后,邮件内容不能解析html代码,需要添加支持html格式内容 $mail->IsHTML(true);

验证注册激活账户

public function active(){$data = request()->param();// 通过id找对应的激活码$active_key = Db::table(\'active\')->where([\'id\'=>$data[\'id\']])->value(\'active_key\');if ($active_key) {// 验证激活码是否正确if ($active_key == $data[\'active_key\']) {// 更改激活状态$res = Db::table(\'active\')->where([\'id\'=>$data[\'id\']])->update([\'status\'=>1]);if ($res) {echo \"激活成功\";}else{echo \"激活失败\";}}else{echo \"激活码不正确\";}}else{echo \"用户不存在\";}}}}else{echo \"用户不存在\";}}

这里只是简单举例,安全性还不高,可以对激活码加密,添加激活码的过期时间等提高安全性

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » thinkphp实现用户注册时邮箱激活