邮箱验证主要用于用户注册以及密码找回,其实这类的思路很明确,日常使用中也大概分为以下几种:
- 有时间限制的带参数的url地址
- 有时间限制的验证码或者验证答案
哈哈,想了几分钟,暂时就想到这两个。思路是比较清晰的,大概是保证一个密匙对应一个用户(验证码也是密匙的一种)。
然后主要的思路有了,需要的就是给这个密匙加上不可重复和不可伪造的属性了。
验证码验证一个是复杂度不是很高,第二个用户还要手动输入验证码。
所以我主要介绍的是带参的URL。
首先介绍的是发送邮件的方法,我用的是phpmailer.php,一个很傻瓜式的类。放置到如图位置:
然后在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耶,我都是狂放的不做排版)。