ThinkPHP 3.2 用户注册邮箱验证激活帐号

您所在的位置:网站首页 onenote账号注册 ThinkPHP 3.2 用户注册邮箱验证激活帐号

ThinkPHP 3.2 用户注册邮箱验证激活帐号

#ThinkPHP 3.2 用户注册邮箱验证激活帐号| 来源: 网络整理| 查看: 265

本文将结合实例,讲解如何使用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 '0' 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 '1', `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='组织和用户关系表';

视图:

用户名:

密 码:

E-mail:

发送邮件:

/** * 发送邮件 */ public function send_email() { $usernName = I('post.userName','Guest112'); $passWord = I('post.passWord','123456'.rand(1000,9999)); $email = I('post.email','[email protected]'); $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 = $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

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3