找回密码

3 篇文章 0 订阅
2 篇文章 0 订阅

前提:tp3
思路:验证用户名和邮箱,通过后重新设置随机密码,然后发送到对应的邮箱
代码:
1.控制类passwordController.class.php
(1)视图方法zhaohui()

//密码找回
	public function zhaohui(){		
		//传递参数
		$this->assign("title",'密码找回');
        $this->display();
    }

(2)对应视图zhaohui.html

<form class="layui-form" id="passform">
            <!--item-->
            <div class="layui-row">
                <div class="layui-col-lg2 layui-col-md2 layui-col-sm2 layui-col-xs2">
                    <div style="text-align:right;padding:10px;">账号</div>
                </div>
                <div class="layui-col-lg10 layui-col-md10 layui-col-sm10 layui-col-xs10">
				    <div>
					    <input type="text" name="username" id="username" class="layui-input" lay-verify="required" placeholder="请输入账号" value="jinjin">
					</div>                    
                </div>
            </div>
            <!--item-->
            <div class="layui-row">
                <div class="layui-col-lg2 layui-col-md2 layui-col-sm2 layui-col-xs2">
                    <div style="text-align:right;padding:10px;">邮箱</div>
                </div>
                <div class="layui-col-lg10 layui-col-md10 layui-col-sm10 layui-col-xs10">
				    <div>
                    <input type="text" name="email" id="email" class="layui-input" lay-verify="required" placeholder="请输入邮箱" value="3223688658@qq.com">
					</div>
                </div>
            </div>
            <!--item-->
            
            <!--item-->
            <div class="layui-row">
                <div class="layui-col-lg6 layui-col-md6 layui-col-sm6 layui-col-xs6">
                    <button type="reset" class="layui-btn layui-btn-primary"><a href="/">返回</a></button>
                </div>
                <div class="layui-col-lg6 layui-col-md6 layui-col-sm6 layui-col-xs6">
                    <button class="layui-btn layui-btn-danger" lay-submit lay-filter="passform">发送邮件</button>
                </div>
            </div>
        </form>

(2-1)对应js块

<script src="__PUBLIC__/Common/layui-v2.3.0/layui/layui.all.js"  media="all"></script>

<script>

layui.use(['layer','element','form'],function(){
	var layer = layui.layer,
	element = layui.element,
	$=layui.jquery;
	form = layui.form;	
	
	/**/
	form.on('submit(passform)',function(data){		
		$.ajax({
			type:'post',
			url:"{:U('Password/emailCheck')}",			
			data:data.field,
			dataType:"JSON",
			beforeSend:function(XMLHttpRequest){$('#load-img').show()},			
			success: function(data){
				if(data.status==1){
					layer.msg('密码重置成功...请登陆邮箱查看你的新密码',{icon:6},function(){						
						window.location.href="{:U('User/index')}";						
					});
				}else{
					layer.msg(data.info,{time:1000});										
				}
			},
			complete:function(XMLHttpRequest){$('#load-img').hide()},
			error:function(data){
				layer.msg('有问题-2');
			}
		});		
       return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。		
		
	})
	
});
/*layui框架下的表单提交正确结尾*/	
</script>

(3)对应验证方法emailCheck()

//邮箱验证
	public function emailCheck(){
	    //检查账号
		$username = I('post.username');
		$mail = I('post.email');
		
		if(!$id = D('User')->where(array('username'=>$username,'email'=>$mail))->find()){
		    $this->error('账号或邮箱错误');
			return false;
		}
		$newpass = mt_rand(100000,999999);
	    $title = "PHP手册密码重置邮件";
		$content = '你的密码已经重置,新密码为:<span style="font-weight:600;color:#f30000;">'.$newpass.'</span><br><a href="http://www.fubaoapp.cn/index.php?m=&c=User&a=index">点击这里及时登录并修改密码</a>';				
		$salt = D('User')->where(array('username'=>$username))->getField('salt');
		$password = md5(md5($newpass).$salt);
		if(false==D('User')->where(array('username'=>$username))->setField('password',$password)){
			$this->error('重置失败,请联系网站管理员');
		}
		session(null);
		cookie('userid',null);//清空cookie
		cookie('username',null);
		cookie('password',null);
		cookie('nickname',null);	
		if(SendMail($mail,$title,$content)) {
			$this->success('重置成功');
		} else {
			$this->error('重置失败');
		}

	}

(4)额外需要的函数SendMail()—在Common/function.php里面

function sendMail($to, $title, $content) {
    Vendor('PHPMailer.PHPMailerAutoload');	
	vendor('PHPMailer.class#phpmailer'); //从PHPMailer目录导class.phpmailer.php类文件
	vendor('PHPMailer.class#smtp');
    $mail = new PHPMailer(); //实例化
	$smtp = new SMTP();
    $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') ; //163邮箱发件人授权密码
    $mail->From = C('MAIL_FROM'); //发件人地址(也就是你的邮箱地址)
    $mail->FromName = C('MAIL_FROMNAME'); //发件人姓名
    $mail->AddAddress($to,"尊敬的客户");
    $mail->WordWrap = 50; //设置每行字符长度
    $mail->isHTML(true); // 是否HTML格式邮件
    $mail->CharSet=C('MAIL_CHARSET'); //设置邮件编码
    $mail->Subject =$title; //邮件主题
    //$mail->Body = $content; //邮件内容
	$mail->MsgHTML($content);
    $mail->AltBody = "为了查看该邮件,请切换到支持 HTML 的邮件客户端"; //邮件正文不支持HTML的备用显示
    return($mail->Send());
}

(5)还需要配置config.php在Conf/config.php里面进行设置

    'MAIL_HOST' =>'smtp.163.com',//smtp服务器的名称
	'MAIL_SMTPAUTH' =>TRUE, //启用smtp认证
	'MAIL_USERNAME' =>'你的163邮箱@163.com',//发件人的邮箱名
	'MAIL_PASSWORD' =>'你的邮箱授权密码',//163邮箱发件人授权密码
	'MAIL_FROM' =>'你的163邮箱@163.com',//发件人邮箱地址
	'MAIL_FROMNAME'=>'PHP手册用户账号激活',//邮件标题,根据需要修改
	'MAIL_CHARSET' =>'utf-8',//设置邮件编码
	'MAIL_isHTML'=>true,

(6)还需要配置一个邮件包------复制即可,不用动。
目录如下:
./ThinkPHP/Library/Vendor/PHPMailer/
里面最需要看的是4个文件:
class.phpmailer.php;
class.pop3.php;
class.smtp.php
SMTP.php
没有研究利索的情况下,别乱去掉里面的文件,直接整包拿来就可以!

(7)效果如下:

PHP手册
(必须先在设置里面绑定邮箱)
如图:
在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值