Thinkphp 邮箱验证思路

邮箱验证主要用于用户注册以及密码找回,其实这类的思路很明确,日常使用中也大概分为以下几种:

  • 有时间限制的带参数的url地址
  • 有时间限制的验证码或者验证答案
    哈哈,想了几分钟,暂时就想到这两个。思路是比较清晰的,大概是保证一个密匙对应一个用户(验证码也是密匙的一种)。
    然后主要的思路有了,需要的就是给这个密匙加上不可重复和不可伪造的属性了。
    验证码验证一个是复杂度不是很高,第二个用户还要手动输入验证码。
    所以我主要介绍的是带参的URL。
    首先介绍的是发送邮件的方法,我用的是phpmailer.php,一个很傻瓜式的类。放置到如图位置:
    《Thinkphp 邮箱验证思路》

然后在common/function.php里面写入发送邮件的方法:

function sendMail($to, $title, $content) {  
        vendor('PHPMailer.class#smtp'); 
        vendor('PHPMailer.class#phpmailer');      
        $mail = new PHPMailer(); //实例化
        $mail->IsSMTP(); // 启用SMTP
        $mail->Host=C('MAIL_HOST'); //smtp服务器的名称(这里以QQ邮箱为例)
        $mail->SMTPAuth = C('MAIL_SMTPAUTH'); //启用smtp认证
        $mail->Username = C('MAIL_USERNAME'); //你的邮箱名
        $mail->Password = C('MAIL_PASSWORD') ; //邮箱密码
        $mail->From = C('MAIL_FROM'); //发件人地址(也就是你的邮箱地址)
        $mail->FromName = C('MAIL_FROMNAME'); //发件人姓名
        $mail->AddAddress($to,"尊敬的客户");
        $mail->WordWrap = 50; //设置每行字符长度
        $mail->IsHTML(C('MAIL_ISHTML')); // 是否HTML格式邮件
        $mail->CharSet=C('MAIL_CHARSET'); //设置邮件编码
        $mail->Subject =$title; //邮件主题
        $mail->Body = $content; //邮件内容
        $mail->AltBody = "这是一个纯html的页面,请在支持html显示的浏览器打开"; //
        //邮件正文不支持HTML的备用显示
        if(!$mail->send()) {
       return   $mail->ErrorInfo;
    } else {
       return true;
    }
}

大家看到了很多配置项都是用C方法读取的,下面是配置项:

 // 配置邮件发送服务器
    'MAIL_HOST' =>'smtp.126.com',//smtp服务器的名称
    'MAIL_SMTPAUTH' =>TRUE, //启用smtp认证
    'MAIL_USERNAME' =>'1@126.com',//你的邮箱名
    'MAIL_FROM' =>'1@126.com',//发件人地址
    'MAIL_FROMNAME'=>'肥肥',//发件人姓名
    'MAIL_PASSWORD' =>'1',//邮箱密码
    'MAIL_CHARSET' =>'utf-8',//设置邮件编码
    'MAIL_ISHTML' =>TRUE, // 是否HTML格式邮件

这块放置到Common/Conf/config.php下。
这里要提醒下,如果需要使用到这个功能,首先要申请一个邮箱并且开通smtp服务,个人建议用网易的邮箱,申请容易,配置简单。
以上都配置完成后,就可以开始使用这个函数来发送邮件了,接下来讲的是邮箱验证模块了。
用户注册的时候,将用户数据写入数据表,并增加三个字段’token_exptime’,’token’,‘status’,其中用户注册时的status设置为0,验证通过后变为1。这里还有一种其他的思路,就是把用户信息存入session或者缓存,验证通过后再存入表。

$data['token_exptime'] = time()+60*60*2;
            $data['token'] = md5($username.$password.$data['create_time'].C('REGISTER_PRO'));

生成密匙和过期时间,最后就是组装邮件内容

$res = D('Admin')->register($data);
            if($res){
                session($username,$data);//将用户信息存入session
                $content = "亲爱的".$username.":<br/>感谢您在我站注册了新帐号。<br/>请点击链接激活您的帐号。<br/> 
                <a href='域名/demo/register/active.php?verify=".$data['token']."' target= 
            '_blank'>域名/demo/register/active.php?verify=".$data['token']."</a><br/> 
                如果以上链接无法点击,请将它复制到你的浏览器地址栏中进入访问,该链接2小时内有效。"; 
                $mes = sendMail($username,"电子商城网站激活邮件",$content);
                return show(1,"已发送验证链接到注册邮箱,请登录邮箱验证");
            }

这里成功的话,测试邮箱就可以收到邮件了。或者可以直接将生成的地址在浏览器访问。多用dump和exit查看数据。
最后是获取参数和验证了,前面我们用了,带参数的url,现在就是把参数获取,对比数据表或者session和缓存里面的数据,一致就通过,修改表。没错,我就是偷懒,没写n(≧≦)n!

同理,忘记密码也是类似原理。(可以上markdown耶,我都是狂放的不做排版)。

点赞