tp5邮箱验证,带token

浏览:5261 发布日期:2016/11/09 分类:技术分享
前台index下的mail.php,继承base.phpnamespace app\index\Controller;

use think\Controller;
use think\Request;
use think\Db;
use think\Loader;

class Mail extends Base 
{
    public function index()
    {
         if(Request::instance()->isPost()) {
            $email        = input('post.email');
            $username     = input('post.username');
            $title        = '您好,您正在进行邮箱验证';
            $hasUser = Db::name('Users')
            ->where(['username'=>$username,'email'=>$email])
            ->find();
            if($hasUser) {
                $uid        = $hasUser['id'];
                $username   = $hasUser['username'];
                $data['passtime']   = time();
                //生成token
                $token = md5($hasUser['salt'].$username.$data['passtime']);
                $data['token'] = $token;
                //保存记录
                $session['salt'] = $hasUser['salt'];
                $session['username'] = $username;
                session('EmailUser',$session);               
                $time        = date('Y-m-d H:i');
                $url         = config('enter_url').'/index/base/emailCheck?email='.$email."&token=".$token;
                $result      = SendMail($title,$username,$time,$email,$url);
                if ($result==1) {
                    $hasEmail = Db::name('EmailCheck')->where(['email'=>$email,'username'=>$username])->find();                 
                    if($hasEmail) {
                        Db::name('EmailCheck')->where(['email'=>$email,'username'=>$username])->update($data);                       
                    } else {
                        $data['email']    = $email;
                        $data['username'] = $username;
                        Db::name('EmailCheck')->insert($data);
                    }

                    return $this->success('系统已向您的邮箱发送了一封邮件<br/>请登录到您的邮箱及时重置您的密码!');
                    
                } else {
                    return $this->error('发送失败');
                }
            } else {
                return $this->error('用户不存在');
            }
        } else {
            return $this->themeFetch('get_password');
        }    
    }
}
前台index下common.php,用于放公共函数/**
 * 系统邮件发送函数
 * @param string $to 接收邮件者邮箱
 * @param string $subject 邮件主题
 * @param string $body 邮件内容
 * @param string $attachment 附件列表
 * @return boolean
 */
function SendMail($title,$username,$time,$email,$url)
{
    $config = config('email');
    import('org.util.phpmailer.PHPMailer');
    $mail = new \PHPMailer;
    $mail->CharSet = 'utf-8';//设定邮件编码,默认ISO-8859-1,如果发中文此项必须设置,否则乱码,
    $mail->IsSMTP();//设定使用SMTP服务
    $mail->SMTPSecure = 'ssl'; 
    $mail->SMTPDebug = 1;//关闭SMTP调试功能//1=errors and messages//2=messages only
    $mail->SMTPAuth  = true;//启用SMTP验证功能
    $mail->Port      = $config['mail_port'];  // SMTP服务器的端口号
    $mail->Host      = $config['mail_smtp'];
    $mail->AddAddress($email);//添加收件人地址,
    $mail->Body      = "亲爱的" . $username . ":<br/>您在" . $time . "提交了通过邮箱".$email."找回密码请求。请点击下面的链接重置密码(按钮24小时内有效)。<br/><a href='" . $url . "' target='_blank'>" . $url . "</a><br/>如果以上链接无法点击,请将它复制到你的浏览器地址栏中进入访问。<br/>如果您没有提交找回密码请求,请忽略此邮件。"; //设置邮件正文
    $mail->From      = $config['mail_address'];//设置发件人名字
    $mail->FromName  = '管理员团队';//设置发件人名字
    $mail->Subject   = $title;//设置邮件标题
    $mail->Username  = $config['mail_loginname'];//设置用户名和密码
    $mail->Password  = $config['mail_password'];
    return($mail->Send());
base.php,放邮箱验证方法namespace app\index\controller;

use think\Controller;
use think\Db;
use think\Loader;
use think\Request;
use common\library\Mini;

/**
 * 系统基础控制器:不需登录
 * @author  tangtanglove <dai_hang_love@126.com>
 */
class Base extends Mini
{
/**
     * 邮箱校验
     * @author cms云商城
     */
    public function emailCheck()
    {
        //获得email邮箱
        $email = input('email');
        $token = input('token');
        
        $UserEmail = session('EmailUser');
        $res = Db::name('EmailCheck')->where(['username'=>$UserEmail['username'],'email'=>$email])->find();
        if($res) {
            $yz_token = md5($UserEmail['salt'].$UserEmail['username'].$res['passtime']);

            if($yz_token==$token){
                if(time()-$res['passtime']>config('email_expiry')) {
                    return $this->error('该链接已过期');
                } else {
                    $session['username'] = $UserEmail['username'];
                    $session['email']    = $email;
                    $session['uuid'] = Db::name('Users')->where(['email'=>$email,'username'=>$UserEmail['username']])->value('uuid');

                    session('editUser',$session);  
                    return $this->success('请重设密码',url('base/editpass'));
                }
            } else {
                return $this->error('无效的链接');
            }

        } else {
            return $this->error('错误的链接');
        }    
        return $this->themeFetch('editpass');       
    }
邮箱验证到这里就结束了,这是指云商城模块的一小部分,我们的目的是方便大家进行敏捷开发,避免重复造轮子
cms云商城,集成微信、阿里支付模块,阿里大于手机验证模块,邮箱验证模块等,极大的提高了开发速度,现在开源推广,如遇到什么问题,有什么好的建议,欢迎加q讨论
源码索取QQ群号 :588401996 或登录小微云商官网:http://w.yunshang.shop
最佳答案
评论( 相关
后面还有条评论,点击查看>>