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

业务流程

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

数据库设计

发送邮件

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

public function index()
{$toemail = 'xxx@126.com';  //这里写的是收件人的邮箱$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 = "1270314186@qq.com";    // 申请了smtp服务的邮箱名(自己的邮箱名)$mail->Password = "hcstaffeplbcjgii";   // 发送方的邮箱密码,不是登录密码,是qq的第三方授权登录码,要自己去开启(之前叫你保存的那个密码)$mail->SMTPSecure = "ssl";    // 使用ssl协议方式,$mail->Port = 465; // QQ邮箱的ssl协议方式端口号是465/587$mail->setFrom("1270314186@qq.com","测试发件人");  // 设置发件人信息,如邮件格式说明中的发件人,$mail->addAddress($toemail,'测试收件人');    // 设置收件人信息,如邮件格式说明中的收件人$mail->addReplyTo("1270314186@qq.com","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 "用户不存在";}
}

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

thinkphp实现用户注册时邮箱激活相关推荐

  1. 使用 Java Mail 实现注册时邮箱激活验证功能

    最近在做毕设中实现注册功能时使用到了邮箱激活验证,在此总结下. 简介 JavaMail 是提供给开发者处理电子邮件相关的编程接口,它是 SUN 发布的用来处理 email 的 API ,它可以方便地执 ...

  2. java web 邮箱激活 与 忘记密码(重置密码)

    推荐: java后台通用权限管理系统(springboot)(https://blog.csdn.net/zwx19921215/article/details/97806078) 推荐:java 个 ...

  3. Java案例-用户注册邮箱验证将邮箱激活码存入redis功能实现

    <–start–> 用户注册时,要求用户填写注册邮箱,然后后台向用户的注册邮箱中发送绑定邮件,并将激活码保存到redis中. 手机短信验证码因为时效期短,只需要将短信验证码存储到sessi ...

  4. java用户注册邮箱激活

    电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等.但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送.本 ...

  5. idea实现注册登录时使用QQ邮箱激活功能

    首先建立数据库,我的数据库为: CREATE TABLE user (uid varchar(11) primary key , -- 账号type int default 1, -- 类型, 1注册 ...

  6. java案例----用户注册--发送邮件并激活/发送邮件验证码

    java案例----用户注册-发送邮件并激活/发送邮件验证码 一.前期准备 1.准备两个邮箱账号(一个发邮件,一个收邮件) 1.1)登录需要发送邮件的QQ邮箱,找到设置项 1.2)然后在账户栏下,找到 ...

  7. Django 慕课前后端实战 -- xadmin后台管理系统、登录模块、注册模块、邮箱激活链接、找回密码

    注意:win下面 pip install 安装python module失败后,可以去https://www.lfd.uci.edu/~gohlke/pythonlibs/网站才在相应的module, ...

  8. 黑马旅游网编写练习(2)--邮箱激活功能

    黑马旅游网编写练习(2)–邮箱激活功能 当用户进行注册时,一般会需要使用邮箱进行激活:所以在这里也模拟一下注册后邮箱的激活功能. 首先导入发送邮箱的jar包mail.jar:或者配置maven地址为: ...

  9. Java实现注册时发送激活邮件验证

    在很多网站注册的时候,为了验证用户信息的真实合法,往往需要验证用户所填邮件的准确性.形式为:用户注册时填写邮箱,注册完成后,网站会向用户所填邮箱发送一封激活邮件,用户点击激活邮件中的链接后,方可完成注 ...

最新文章

  1. Hough Transform 霍夫变换检测直线
  2. 人工智能项目开发规划与准备
  3. Python编程基础:第四十八节 对象作为参数Objects as Argument
  4. Android中常见的MVC/MVP/MVVM模式
  5. ORA-02266错误处理
  6. java script eval_java ScriptEngine 使用 (支持JavaScript脚本,eval()函数等)
  7. eclipse插件开发(三) 简易4页签编辑器(源码 | 设计 | JS | CSS)配色修复JS多行注释问题
  8. 10-4 用select进行调度
  9. Android 样式
  10. restapi(3)- MongoDBEngine : MongoDB Scala编程工具库
  11. c语言编程数的平方,C语言编程实例:由两个平方三位数获得三个平方二位数
  12. autocad2013安装闪退_Win10系统打开AutoCad闪退的两种修复方法
  13. Maven之(五)Maven仓库
  14. 计算机广告制作介绍,计算机广告制作.ppt
  15. win10+centos8双系统
  16. js实现农历时间代码
  17. JVM垃圾收集器-Parallel Scavenge收集器
  18. Unity工程发布到HoloLens
  19. Android 微软雅黑、仿宋、黑体的使用
  20. SpringCloud与微服务Ⅷ --- Hystrix断路器

热门文章

  1. win10移动桌面图标字体发虚
  2. 实验二十一、积分运算电路的输出波形分析
  3. 免抠图PNG素材网站
  4. 三个大傻大闹你的脑袋,如何让他们胜过一个诸葛亮?
  5. Redis 缓存穿透、击穿、雪崩 解决方法
  6. fpga挂一片ddr2_FPGA上外挂DDR2DDR3MIG IP的使用记录
  7. Qt实战案例(2)——电子时钟的设计
  8. 红旗颂的感情多么真挚,突然很理解老一代们:-)
  9. PTA基础编程题目集7-33 有理数加法
  10. 前端面试必会 | 一文读懂 JavaScript 中的 this 关键字