Laravel博客系统开发--邮件操作(忘记/重置密码)
邮件扩展
1.在app目录下创建common.php文件(公共文件)
2.下载邮件扩展
composer require phpmailer/phpmailer
3.在common.php文件中编写发送邮件函数
<?php
namespace App;
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
function mailto($to,$title,$content)
{$mail = new PHPMailer(true); // Passing `true` enables exceptionstry {//服务器配置$mail->CharSet ="UTF-8"; //设定邮件编码$mail->SMTPDebug = 0; // 调试模式输出$mail->isSMTP(); // 使用SMTP$mail->Host = 'smtp.qq.com'; // SMTP服务器$mail->SMTPAuth = true; // 允许 SMTP 认证$mail->Username = '1297611128@qq.com'; // SMTP 用户名 即邮箱的用户名$mail->Password = 'cqrxusqyehxkgfhc'; // SMTP 密码 部分邮箱是授权码(例如163邮箱)$mail->SMTPSecure = 'ssl'; // 允许 TLS 或者ssl协议$mail->Port = 465; // 服务器端口 25 或者465 具体要看邮箱服务器支持$mail->setFrom('1297611128@qq.com','黄昌龙'); //发件人$mail->addAddress($to); // 收件人$mail->isHTML(true); // 是否以HTML文档格式发送 发送后客户端可直接显示对应HTML内容$mail->Subject = $title;$mail->Body = $content;return $mail->send(); //返回发送得到结果} catch (Exception $e) {exception($mail->ErrorInfo);}
}
4.在composer.json中添加以下代码,并执行composer dump-autoload命令
忘记密码
1.创建forget方法和reset方法路由
代码如下
Route::group(['prefix'=>'admin','namespace'=>'Admin'],function (){//登录Route::match(['get','post'],'/','Index@login');//注册Route::match(['get','post'],'register','Index@register');//忘记密码Route::match(['get','post'],'forget','Index@forget');//重置密码Route::match(['get','post'],'reset','Index@reset');
});
2.引入HTML模板
forget.blade.php主要代码如下:
<form><div class="loginbox-title">忘记密码</div><div class="loginbox-or"><div class="or-line"></div></div><div class="loginbox-textbox"><input type="text" class="form-control" name="username" placeholder="请输入用户名" /></div><div class="loginbox-textbox"><input type="text" class="form-control" name="email" placeholder="请输入邮箱" /></div><div class="loginbox-submit"><input type="submit" id="sendCode" class="btn btn-primary btn-block" value="发送验证码"></div><div class="loginbox-signup"><a href="{{url('admin')}}">返回登录</a></div>
</form>
3.通过jquery的ajax提交数据给Index控制器中的forget方法
代码如下:
$(function () {$('#sendCode').click(function () {$.ajax({url:"{{url('admin/forget')}}",type:'post',data:$('form').serialize(),dataType:'json',success:function (data) {if (data.code==1){layer.msg(data.msg,{icon:6,time:2000,},function () {location.href=data.url;});}else{layer.open({title:"发送失败",content:data.msg,icon:5,anim:6})}}});return false;});});
4.编写Index控制器中forget方法,并接受前端传过来的数据,处理后将其传到Admin模型的forget方法处理
代码如下:
//忘记密码public function forget(){if (request()->isMethod('post')){$data=request()->only(['username','email']);$result=(new Admin())->forget($data);if ($result==1){$msg=['code'=>1,'msg'=>"验证码发送成功",'url'=>url('admin/reset'),];}else{$msg=['code'=>0,'msg'=>$result,];}return $msg;}return view('admin.index.forget');}
5.编写Admin模型中forget代码,处理控制器传过来的数据,创建验证器,对数据进行验证,利用session存储验证码和用户名。
public function forget($data){$rule=['username'=>'bail|required','email'=>'required',];$msg=['username.required'=>'用户名不能为空','email.required'=>'邮箱不能为空',];$validator=Validator::make($data,$rule,$msg);if ($validator->fails()){return $validator->errors()->first();}$adminData=$this->where($data)->first();if ($adminData){$code=rand(1000,9999);//产生随机验证码$result=mailto($adminData['email'],'您的重置密码验证码',$code);if ($result){session(['code'=>$code]);session(['email'=>$adminData['email']]);return 1;}}else{return "用户名或邮箱错误";}}
重置密码
1.引入HTML文件reset.blade.php
<form><div class="loginbox-title">重置密码</div><div class="loginbox-or"><div class="or-line"></div></div><div class="loginbox-textbox"><input type="text" class="form-control" name="newpassword" placeholder="请输入新密码" /></div><div class="loginbox-textbox"><input type="text" class="form-control" name="code" placeholder="请输入验证码" /></div><div class="loginbox-submit"><input type="submit" id="reset" class="btn btn-primary btn-block" value="重置密码"></div><div class="loginbox-signup"><a href="{{url('admin')}}">返回登录</a></div></form>
2.用过jquery的ajax将新密码和验证码提交给Index控制器的reset方法处理
代码如下:
$(function () {$('#reset').click(function () {$.ajax({url:"{{url('admin/reset')}}",type:'post',data:$('form').serialize(),dataType:'json',success:function (data) {if (data.code==1){layer.msg(data.msg,{icon:6,time:2000,},function () {location.href=data.url;});}else{layer.open({title:"密码重置失败",content:data.msg,icon:5,anim:6})}}});return false;});});
3.编写Index控制器中reset方法,接收新密码和验证码,并传给Admin模型的reset方法处理
代码如下:
public function reset(){if (request()->isMethod('post')){$data=request()->only(['newpassword','code']);$result=(new Admin())->reset($data);if ($result==1){$msg=['code'=>1,'msg'=>'重置密码成功','url'=>url('admin')];}else{$msg=['code'=>0,'msg'=>$result];}return $msg;}return view('admin.index.reset');}
4.编写Admin模型中reset方法,创建验证器验证数据
代码如下:
//重置密码public function reset($data){$rule=['newpassword'=>'bail|required','code'=>'required',];$msg=['newpassword'=>'新密码不能为空','code.required'=>'验证码不能为空',];$validator=Validator::make($data,$rule,$msg);if ($validator->fails()){return $validator->errors()->first();}if (session('code')==$data['code']){$adminData=$this->where('email',session('email'))->first();$adminData->password=$data['newpassword'];$result=$adminData->save();if ($result){return 1;}else{return "密码重置失败";}}else{return '验证码错误';}}
效果图如下:
Laravel博客系统开发--邮件操作(忘记/重置密码)相关推荐
- Laravel博客系统开发--登录功能
登录功能 1.定义一条路由 Route::group(['prefix'=>'admin','namespace'=>'Admin'],function (){//登录Route::mat ...
- 个人博客系统开发总结之 mybatis操作blob字段
mybaits通过mapper文件进行数据库的增删改查操作,在进行增删改查操作时需要将java的数据类型与数据库的数据类型进行转换,此时就会用到TypeHandler类型处理器.mybatis内置了j ...
- 和lock一起学beego 博客系统开发为例(五)
为什么80%的码农都做不了架构师?>>> 接着上篇来写<和lock一起学beego 博客系统开发为例(四)> 这篇主要完成以下事项: 下篇我们要完成下面三个任务: ...
- 视频教程-python项目之博客系统开发-Python
python项目之博客系统开发 TriAquae开源运维软件创始人,混迹IT运维领域多年,曾就职于松下.国政通.飞信.中金.NOKIA等公司,维护过少至几十台,多至数万台设备的IT系统,致力于提高企业 ...
- python项目之博客系统开发-李杰-专题视频课程
python项目之博客系统开发-3133人已学习 课程介绍 系统由于主站.个人博客.后台管理三部分组成,其中包含Web开发中的知识,如:多级评论.文章点赞.主题定制.iframe伪Aj ...
- 和lock一起学beego 博客系统开发为例(六)
为什么80%的码农都做不了架构师?>>> 接着上篇来写<和lock一起学beego 博客系统开发为例(五)> 这篇主要完成以下事项: 下篇我们要完成下面三个任务: ...
- 【SSM架构】博客系统开发(七)-登陆界面
[SSM架构]博客系统开发7-登陆界面 1 完成效果 2 建login.jsp 3 导入静态资源 4 建login.jsp 5 配置springmvc 6 发布项目,在浏览器地址栏访问 7 所需文件下 ...
- uliweb新教程--多人博客系统开发
2019独角兽企业重金招聘Python工程师标准>>> 开始写一个uliweb的新教程,主要围绕着一个多人博客系统的开发来写.下面是我想实现的功能: blog功能 blog首页展示 ...
- JSP~Qing博客系统开发
本篇文章主要对自己做的一个C#识别软件.一个Web博客系统做项目总结. 一.ToTool识别转换助手 软件打包之后在我电脑上运行正常,识别印刷体没有问题,但在不同系统不同电脑下运行会出问题.因为核心算 ...
最新文章
- Btrace入门到熟练小工完全指南
- C++知识点22——使用C++标准库(顺序容器list的初始化、赋值、访问、交换、添加、删除与迭代器失效)
- dicom文件_图像识别 | 使用Python对医学Dicom文件的预处理(含代码)
- const深度总结(effective C++)
- java 强制下线_【java】如何强制app端强制下线?
- LeetCode 47. 全排列 II(回溯+搜索剪枝)
- (转)Windows Form Application 读取并修改App.config文件
- 如何导入gradle版本不同的Android项目
- 京东静态网页设计案例(1)
- 安装程序无法打开注册表项 UNKNOWN\Components\…解决办法
- persevere的用法_努力奋斗的英文短语 努力的英文意思是
- 【saltstack】配置salt-master端REDIS_RETURN
- centos7.8 swoole安装和使用
- Arcgis使用自定义的图标库-地图POI图标风格
- 抖音seo企业号,矩阵同步分发,抖音搜索框SEO优化系统搭建。
- python计算平均值标准差和中位数_如何使用python求平均数、方差、中位数
- 锐捷交换机,路由器,无线,ESS,EG所有操作配置命令合集
- 分享一个好用的护眼google插件
- MATLAB运动车辆检测系统
- python期中考试试卷分析_学校期中考试试卷分析和总结
热门文章
- 【多模态】MoE解决多模态单双塔问题 VLMo: Unifified Vision-Language Pre-Training with Mixture-of-Modality-Experts
- mysql的for循环语句_Mysql实现for循环遍历
- HTML5开发基础与应用
- 北京应用物理计算机研究所九所,青年才俊话成长 | 陈明娟:情满九所,依依不舍...
- VBA学习笔记8:单元格的合并与拆分
- 灰狼进化算法简介及启发式算法的本质
- 设计模式之我爱我家(下)
- 网易面试题:男女小孩战队问题
- 有什么微软各种服务器,除了Windows操作系统 微软还有什么?
- Android 使用RecyclerView 实现 tag 展示