ThinkPHP 3.2 用户注册邮箱验证激活帐号
本文将结合实例,讲解如何使用PHP+Mysql完成注册帐号、发送激活邮件、验证激活帐号、处理URL链接过期的功能。
业务流程
1、用户提交注册信息。
2、写入数据库,此时帐号状态未激活。
3、将用户名密码或其他标识字符加密构造成激活识别码(你也可以叫激活码)。
4、将构造好的激活识别码组成URL发送到用户提交的邮箱。
5、用户登录邮箱并点击URL,进行激活。
6、验证激活识别码,如果正确则激活帐号。
准备数据表
用户信息表中字段Email很重要,它可以用来验证用户、找回密码、甚至对网站方来说可以用来收集用户信息进行Email营销,以下是用户信息表t_user的表结构:
DROP TABLE IF EXISTS `wechat_user`;
CREATE TABLE `wechat_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`orgId` int(11) DEFAULT '' COMMENT '组织ID',
`username` varchar(40) DEFAULT NULL,
`password` varchar(40) NOT NULL,
`nickName` varchar(40) DEFAULT NULL,
`mobile` varchar(20) DEFAULT NULL,
`openId` varchar(50) DEFAULT NULL,
`createTime` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '加入时间',
`checkFlag` int(2) DEFAULT NULL,
`enabled` tinyint(2) DEFAULT '',
`accessExpires` int(12) DEFAULT NULL,
`accessToken` varchar(128) DEFAULT NULL,
`reTime` varchar(32) DEFAULT NULL,
`email` varchar(128) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=434 DEFAULT CHARSET=utf8 COMMENT='组织和用户关系表';
视图:
<form id="reg" action="register.php" method="post">
<p>用户名:<input type="text" class="input" name="username" id="user"></p>
<p>密 码:<input type="password" class="input" name="password" id="pass"></p>
<p>E-mail:<input type="text" class="input" name="email" id="email"></p>
<p><input type="submit" class="btn" value="提交注册"></p>
</form>
发送邮件:
/**
* 发送邮件
*/
public function send_email()
{
$usernName = I('post.userName','Guest112');
$passWord = I('post.passWord','123456'.rand(1000,9999));
$email = I('post.email','756684177@qq.com');
$reTime = time();
$accessToken = md5($usernName . $passWord . $reTime);//创建用于激活识别码
$accessExpires = $reTime + 60 * 60 * 24; //过期时间为24小时后
$model = M('User');
$data['username'] = $usernName;
$data['password'] = $passWord;
$data['nickName'] = $usernName;
$data['accessToken'] = $accessToken;
$data['accessExpires'] = $accessExpires;
$data['reTime'] = $reTime;
$data['email'] = $email;
$data['enabled'] = 0;
if ($model->add($data) == false) return 'error';
echo 'success';
$link = "http://wechatu.xd107.com/home/Index/activation?accessToken={$accessToken}";
$str = <<<html
您好!<p></p>
感谢您在Tinywan世界注册帐户!<p></p>
帐户需要激活才能使用,赶紧激活成为Tinywan家园的正式一员吧:)<p></p>
点击下面的链接立即激活帐户(或将网址复制到浏览器中打开):<p></p>
$link html;
$result = send_email($email, 'Tinywan世界帐户激活邮件--' . $usernName, $str);
if ($result['error'] == 1) {
var_dump($result);
die;
}
var_dump('发送完成');
}
激活邮件:
// 用户点击激活方法
public function activation()
{
$accessToken = I('get.accessToken');
$nowTime = time();
$where['enabled'] = 0;
$where['accessToken'] = $accessToken;
$res = M('User')->where($where)->find();
if (!$res) exit('没有改账户');
if ($nowTime > $res['accessexpires']) exit('您的激活有效期已过,请登录您的帐号重新发送激活邮件');
$update = M('User')->where(array('id' => $res['id']))->setField('enabled', 1);
if ($update == false) exit('修改数据库字段失败');
$link = "http://wechatu.xd107.com/home/Index/qrcode?accessToken={$accessToken}"; //这里跳转到一个个人博客的二维码
header('location:' . $link);
}
附:发送邮件方法:
/**
* 发送邮件
* @param string $address 需要发送的邮箱地址 发送给多个地址需要写成数组形式
* @param string $subject 标题
* @param string $content 内容
* @return boolean 是否成功
*/
function send_email($address, $subject, $content)
{
$email_smtp = C('EMAIL_SMTP');
$email_username = C('EMAIL_USERNAME');
$email_password = C('EMAIL_PASSWORD');
$email_from_name = C('EMAIL_FROM_NAME');
if (empty($email_smtp) || empty($email_username) || empty($email_password) || empty($email_from_name)) {
return array("error" => 1, "message" => '邮箱配置不完整');
}
require './ThinkPHP/Library/Org/Nx/class.phpmailer.php';
require './ThinkPHP/Library/Org/Nx/class.smtp.php';
$phpmailer = new \Phpmailer();
// 设置PHPMailer使用SMTP服务器发送Email
$phpmailer->IsSMTP();
// 设置为html格式
$phpmailer->IsHTML(true);
// 设置邮件的字符编码'
$phpmailer->CharSet = 'UTF-8';
// 设置SMTP服务器。
$phpmailer->Host = $email_smtp;
// 设置为"需要验证"
$phpmailer->SMTPAuth = true;
// 设置用户名
$phpmailer->Username = $email_username;
// 设置密码
$phpmailer->Password = $email_password;
// 设置邮件头的From字段。
$phpmailer->From = $email_username;
// 设置发件人名字
$phpmailer->FromName = $email_from_name;
// 添加收件人地址,可以多次使用来添加多个收件人
if (is_array($address)) {
foreach ($address as $addressv) {
$phpmailer->AddAddress($addressv);
}
} else {
$phpmailer->AddAddress($address);
}
// 设置邮件标题
$phpmailer->Subject = $subject;
// 设置邮件正文
$phpmailer->Body = $content;
// 发送邮件。
if (!$phpmailer->Send()) {
$phpmailererror = $phpmailer->ErrorInfo;
return array("error" => 1, "message" => $phpmailererror);
} else {
return array("error" => 0);
}
}
代码详细见:https://github.com/Tinywan/ThinkPhpStudy
ThinkPHP 3.2 用户注册邮箱验证激活帐号的更多相关文章
- PHP用户注册邮箱验证激活帐号
我们在很多网站注册会员时,注册完成后,系统会自动向用户的邮箱发送一封邮件,这封邮件的内容就是一个URL链接,用户需要点击打开这个链接才能激活之前在该网站注册的帐号.激活成功后才能正常使用会员功能. 本 ...
- PHP用户注册邮箱并验证激活帐号
我们在很多网站注册会员时,注册完成后,系统会自动向用户的邮箱发送一封邮件,这封邮件的内容就是一个URL链接,用户需要点击打开这个链接才能激活之前在该网站注册的帐号.激活成功后才能正常使用会员功能. 查 ...
- ThinkPHP 3.2 用户注册邮箱验证帐号找回密码
一.前言 当然现在有的网站也有手机短信的方式找回密码,原理就是通过发送验证码来验明正身,和发送邮件验证一样,最终还是要通过重置密码来完成找回密码的流程. 本文将使用PHP+Mysql+jQuery来实 ...
- (进阶篇)PHP实现用户注册后邮箱验证,激活帐号
我们在很多网站注册会员时,注册完成后,系统会自动向用户的邮箱发送一封邮件,这封邮件的内容就是一个URL链接,用户需要点击打开这个链接才能激活之前在该网站注册的帐号.激活成功后才能正常使用会员功能. 本 ...
- (进阶篇)PHP(thinkphp5框架)实现用户注册后邮箱验证,激活帐号
本文将结合实例,讲解如何使用thinkphp5+Mysql完成注册帐号.发送激活邮件.验证激活帐号.处理URL链接过期的功能. 业务流程 1.用户提交注册信息. 2.写入数据库,此时帐号状态未激活. ...
- .net 实现注册邮箱验证激活
没事上网当了个注册邮箱验证激活的代码,用起来感觉还不错,特意和大家要一起分享一下 下面是主要实现代码: uing System.Net.Mail; public partial class jquer ...
- [转]C# 邮箱验证激活
原文链接 /// <summary> /// 发送邮件 发送激活码 /// </summary> /// <param name="address"& ...
- Java案例-用户注册邮箱绑定激活功能实现
<–start–> 需求描述:当客户打开收到邮箱激活码的邮件,点击激活链接,正确填写激活码后就会完成邮箱激活的步骤. 在后台编程代码编写中,有以下几个要点: ① 接收客户的手机号码和邮箱激 ...
- thinkphp phpmailer邮箱验证
thinkphp 关于phpmailer的邮箱验证 一 . 登陆自己的邮箱,例如:qq邮箱.登陆qq邮箱在账户设置中开启smtp服务: 之后回发送一个授权码 , 这个授权码先保存下来,这个授权码在后 ...
随机推荐
- chart.js & canvas
chart.js & canvas https://www.chartjs.org/samples/latest/ https://www.chartjs.org/samples/latest ...
- Test Scenarios for a window
1 check if default window size is correct2 check if child window size is correct3 check if there is ...
- 在使用ADOQuery删除数据时的处理 [问题点数:100分,结帖人isdxsc]
在使用ADOQuery删除数据时的,希望在他的事件BeforeDelete进行一些判断,符合要求的进行删除,不符合要求的终止这个删除行为,请问应该用什么语句呢?还有个比较奇怪的现象也一起请教:DBGr ...
- Linux学习之/etc/init.d/目录和rc.local脚本
init.d目录中包含很多系统服务的启动和停止脚本,比较常用的就是网络服务,当你修改了网络配置时,可以自行 sudo /etc/init.d/networking restart 命令来重启网络服务 ...
- WordPress发送注册用户设置密码邮件提示:您的密码重设链接无效,请在下方请求新链接
1.修改WP根目录下的 wp-login.php文件将 $message .= '<' . network_site_url("wp-login.php?action=rp&k ...
- Harmonic Number LightOJ - 1234 (分段打表)
题意: 求调和级数,但n很大啦.. 解析: 分段打表 每间隔50存储一个数,在计算时 只需要找到离输入的n最近的那个数 以它为起点 开始计算即可 emm...补充一下调和级数的运算公式 r为常 ...
- itexpdf同一个段落不同文字,如何设置不同的格式
Java使用itexpdf生成PDF,正常情况下,新建一个段落Paragraph,然后可以给段落添加一个格式BaseFont Paragraph paragraphBlue = new Paragra ...
- day27 多态 多继承 接口类 抽象类
简单来说:多态就是指一个相同的方法名在不同的对象调用的时候实现一样或者不一样的方法实例1: 动物类有个方法 "嚎叫" 狗类也有个方法 "嚎叫" 猫类继承了动物类 ...
- 用树莓派改装电风扇及实现Android遥控
最近天气很热,我租的房子又没有空调,基本上风扇一开就是一晚上,结果经常起床后发现口干舌燥的.我觉得这肯定是因为整晚吹风扇搞的,不管是不是,反正我觉得就是了.不开风扇吧,热!开风扇吧,早上起来不舒服,怎 ...
- 自学Aruba2.1-Aruba Web UI --Dashbord面板介绍
点击返回:自学Aruba之路 自学Aruba2.1-Aruba Web UI --Dashbord面板介绍 本文所有设计的的controller版本信息如下: Aruba7205 V6.4.4.16 ...