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服务: 之后回发送一个授权码 , 这个授权码先保存下来,这个授权码在后 ...
随机推荐
- 如何删除GitHub或者GitLab 上的文件夹
如何删除GitHub或者GitLab 上的文件夹 需求分析 假设小明有一天不小心把本地仓库的一个文件夹A推送到了远程GIT服务器(例如:github,gitlab,gitee)上,此时想删除远程仓 ...
- 命令行方式(SSH or powershell )远程windows server
1. 使用ssh的方式远程登录window server 网上找到的方法大部分是freesshd 或者是Copsshd这样的工具 方式就是 下载安装文件,然后服务器端进行安装: 安装完成之后作为服务启 ...
- add (db.collection.add)添加数据
db.collection('cheshi').add({ data: { cheshi:4, } }).then((res) => { console.log(res) })
- Chrome disable cache & clear memory cache
Chrome disable cache & clear memory cache disable cache
- loadrunner基础学习笔记三
运行时设置: 打开运行时设置:任务窗格中-选择回放-点击运行时设置按钮 1 重复执行次数:=2 2 步:控制迭代时间间隔 3 日志设置:指出要在运行测试期间记录的信息量 4 思考时间:可以在cont ...
- 如何禁止复制电脑文件到U盘、禁止U盘拷贝文件
在公司局域网中,有时候我们处于保护电脑文件安全和商业机密的需要,会禁止局域网电脑使用U盘.禁用USB存储设备:或者禁止通过U盘复制电脑文件.禁止U盘拷贝公司电脑文件.那么,怎样实现呢?本文提供两种方法 ...
- delphi7调用数据库连接属性
背景:连接数据库用ADOQuery控件,但是程序一旦编译完成,如果想更改数据库连接设置还得重新修改ADOQuery的属性重新编译 如果可以在程序中可以随时设置ADOQuery的属性则会方便很多. 实现 ...
- How to Add Trust Sites into IE before IE10 through Group Policy
Due to IE10 published, I'll conclude the methods that how to add trust sites in to IE of the version ...
- 【转】安全加密(二):BLE安全攻击反制措施
本文导读 近年来出现了越来越多的低功耗蓝牙应用,即BLE(Bluetooth Low Energy),比如说智能手环.防丢器等,对蓝牙的安全要求也越来越高.这篇文章将深入浅出说明BLE4.0~4.2中 ...
- A1015. Reversible Primes
A reversible prime in any number system is a prime whose "reverse" in that number system i ...