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 ‘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=‘组织和用户关系表‘;

视图:

<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‘,‘[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 = <<<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);
    }
}
时间: 2024-08-28 11:14:57

ThinkPHP 3.2 用户注册邮箱验证激活帐号的相关文章

帝国cms登录提示“该用户未在本站激活,请重新登陆以激活帐号”

整合UCenter 1.5.0 帝国退出显示 该用户未在本站激活,请重新登陆以激活帐号 在帝国登陆,然后退出,会显示"退出成功",再显示"该用户未在本站激活,请重新登陆以激活帐号" 此提示出现在 /e/class/user.php  islogin() 函数下 //--------------------------- Ucenter ---------------------------if(getcvar('mldoactive')==$userid &

注册邮箱验证激活技术

一.先说思路 //1.数据库加三个字段,state:(0:未激活,1:激活成功),ActiCode:(放激活码),token_exptime(过期时间,用来验证激活邮件是否过期) //2.用户填写资料,点击注册,插入数据成功,state字段默认是0,同时生成一个ActiCode(用传过来的邮箱.密码.和当前时间加密形成)也存入数据库 //3.发送邮件...提示用户登录邮箱激活...邮件中带一个激活成功页的URL,URL里有两个参数(1,用户ID,2:激活码) //4.用户登录邮箱点击链接,来到处

OnKeyListener键盘事件验证银行帐号

可以通过键盘事件对EMAIL进行验证(这是网上最多的例子),也可以加入关键字非法文字的过滤.如果要监听键盘事件,必须知道按下和松开两种不同的操作,在OnKeyEvent可以找到按下松开的键.我们这个案例是输入银行卡号,用大字四个一组分隔回显出来,用于提醒是否输错! 知识点:OnKey 一.设计界面 1.打开“res/layout/activity_main.xml”文件. (1)从工具栏向activity拖出1个文本编辑框EditText.2个文本标签TextView. 3.打开activity

用户注册邮箱验证逻辑

1.数据库增加两个字段:一个存验证码,一个存验证状态 2.用户注册后给邮箱发邮件,地址上带上验证码参数 3.用户点击地址,通过地址获取到验证码,拿这个验证码到数据库查找是否存在 4.如不存在验证失败,如果存在改了验证状态,并重置了验证码,跳转登录页 5.用户再点进来的话给一个友好的页面,说已经验证通过,提醒登陆

邮箱验证激活账号

1. 流程 我们注册账号的时候会收到一封邮件,点击邮件里的链接就激活账号,这个功能很常见.其实就是在用户表里面加state和code字段,state表示激活状态,code是激活码 用户填写账号点击注册,接着后台就往数据库插入数据,数据中state字段为0(表示未激活),还有个随机的code 之后就向该用户发送邮件,邮件里有一个激活账号的URL(URL有用户id和对应的随机激活码) 用户点击邮件的链接,就会带上用户id和激活码来到激活页面激活账号,若邮件的参数和数据库参数一致则激活账号,更新字段s

转:java 帐号激活与忘记密码 实例

原文链接:http://endual.iteye.com/blog/1613679 一.帐户激活 在 很多时候,在某些网站注册一个用户之后,网站会给这个用户注册时填写的email地址发送一封帐户激活邮件,这封邮件的内容就是一个激活帐户的链接和一段 简短的文字描述,如果用户没有去邮箱将帐户激活,可能在使用网站的某些功能时就会受到限制,比如不能发贴.下载资料.评论等限制.这么做的原因应该是为了 保证帐户的安全性和邮箱的有效性,以后网站如果有什么活动.资讯或系统安全通知等,可以在第一时间通知到用户.比

JavaMail学习笔记(七)、帐号激活与忘记密码 实例(zhuan)

一.帐户激活 在很多时候,在某些网站注册一个用户之后,网站会给这个用户注册时填写的email地址发送一封帐户激活邮件,这封邮件的内容就是一个激活帐户的链接和一段简短的文字描述,如果用户没有去邮箱将帐户激活,可能在使用网站的某些功能时就会受到限制,比如不能发贴.下载资料.评论等限制.这么做的原因应该是为了保证帐户的安全性和邮箱的有效性,以后网站如果有什么活动.资讯或系统安全通知等,可以在第一时间通知到用户.比如我在奇艺视频网站注册一个帐号之后,它就会往我注册时填写的邮箱中发一封帐户激活的邮件,邮件

JavaMail学习笔记(七)、帐号激活与忘记密码 实例

http://blog.csdn.net/xyang81/article/details/7727141 一.帐户激活 在很多时候,在某些网站注册一个用户之后,网站会给这个用户注册时填写的email地址发送一封帐户激活邮件,这封邮件的内容就是一个激活帐户的链接和一段简短的文字描述,如果用户没有去邮箱将帐户激活,可能在使用网站的某些功能时就会受到限制,比如不能发贴.下载资料.评论等限制.这么做的原因应该是为了保证帐户的安全性和邮箱的有效性,以后网站如果有什么活动.资讯或系统安全通知等,可以在第一时

discuz邮箱注册激活||腾讯企业邮箱免费注册及登录方法

如何申请免费的企业邮箱,如果拥有了网站,还能有一个免费的域名邮箱,是不是很拉风呢?对于还没有注册企业的用户来说,优先使用企业邮箱,是非常好的事呢. 腾讯邮箱现在开放免费的企业邮箱注册,效果要比个人邮箱好很多,条件就是只要拥有域名就可以,那么接下来就让小编分享一下免费注册及如何登录的教程吧! 百度搜索“腾讯企业邮箱”,会在第二条看到注册及登录地址,点击进入. 进入主页后,点击“立即开通”按钮. 点击进入到注册选择页面,下拉到如图所示,点击“免费注册”. 创建管理帐号,详细填写所示内容. 注意: 1