创建助手函数,随机验证码

1:在app目录下创建名叫helper.php的文件
2:在helper.php中写随机验证码的函数

function code_rand($len=4){$str='';for($i=0;$i<$len;$i++){$a=mt_rand(0,9);$str=$str.$a;}return $str;
}

3.这个文件是我们自己创建的,框架不会识别,需要我们在composer.json文件中处理自动加载,在更改了composer文件之后需要在Terminal终端中执行:composer dump;

 "autoload": {//自动加载数据库"classmap": ["database/seeds","database/factories"],"psr-4": {//自动加载类"App\\": "app/"},//自动加载文件"files": ["app/helper.php"]},
邮箱发送验证码:

1:创建发送验证码的类:RegisterNotify这个类是laravel框架的内置类

php artisan make:notification RegisterNotify

2:设置邮箱发送的内容:RegisterNotify中的toMail

 public function toMail($notifiable){return (new MailMessage)//$this->code是第3步中new RegisterNotify传到这个类中的构造方法里的->line('您好,你注册我网需要的验证码:'.$this->code.',已经发送到您的邮箱,欢迎注册我网');}

3:利用邮箱发送验证码的逻辑代码:

//filter_var($request->username)是邮箱返回true
if(filter_var($request->username,FILTER_VALIDATE_EMAIL)){$type='email';firstOrNew这个方法的返回一个User的对象,比对邮箱,看数据库会不会有,有的话会返回一个这个消息的User对象,如果没有,就new一个空的对象,因为在调用notify时需要一个User对象$user=User::firstOrNew(['email'=>$request->username])?:new User();// 当是邮箱时给他发送邮件告知验证码,并且在new RegisterNotify给它把$code传过去$user->notify(New RegisterNotify($code));//未完

4:设置邮件发送时的配置

MAIL_DRIVER=SMTP
MAIL_HOST=smtpdm.aliyun.com
MAIL_PORT=80
MAIL_USERNAME=fs@mengju.mumeng.xyz
MAIL_PASSWORD=MJ123456fs
MAIL_ENCRYPTION=
MAIL_FROM_ADDRESS=fs@mengju.mumeng.xyz
MAIL_FROM_NAME=mengju.mumeng.xyz
给手机发送短信验证码

1:手机发送验证码的逻辑代码:

//给手机号码做正则匹配
}elseif ('/^\d{11}$/'){$type = 'mobile';//这个是hdjs封装好的短信模板$data = [//短信签名'sign'     => '牧夢哟',//短信模板'template' => 'SMS_144145970',//前台提交来的手机号码'mobile'   => $request->username,//模板变量'vars'     => ["code" => $code],];//Aliyun这个类也是hdjs封装的函数,需要在Terminal终端中执行//composer require houdunwang/aliyun加载houdunwang/aliyun这个类库$res = Aliyun::instance('Sms')->send($data);

3.在AppServiceProvider配置短信发送的key和id,并且在这个类中的boot方法中引用这个方法,这样保证它可以在短信发送之前配置好


protected function loadConfig (){Aliyun::config ( [/*|--------------------------------------------------------------------------| 根据服务器所在区域进行选择| https://help.aliyun.com/document_detail/40654.html?spm=5176.7114037.1996646101.1.OCtdEo*/'regionId'  => 'cn-hangzhou' ,/*|--------------------------------------------------------------------------| 如果使用主账号访问,登陆阿里云 AccessKey 管理页面创建、查看| 如果使用子账号访问,请登录阿里云访问控制控制台查看*/'accessId'  => 'LTAIcNOXhfU9jSMZ' ,/*|--------------------------------------------------------------------------| 如果使用主账号访问,登陆阿里云 AccessKey 管理页面创建、查看| 如果使用子账号访问,请登录阿里云访问控制控制台查看*/'accessKey' => '5HOslwGi0vhX4l2xLUaKU4qTv8oB9k' ,] );}
设置验证码过期时间:

1:在存储验证码时,存储验证码的过期时间

  public function saveToSession($code,$type,$request){session()->put('valid_code',['code'=>$code,'type'=>$type,'username'=>$request->username,'expire'=>time()+$this->expire,//过期时间]);}

2:判断验证码是否过期,过期后扔出异常消息提示

 public function checkexpire(){//取出存在session里的过期时间和现在的时间做比较$expire=session('valid_code.expire');if($expire&&$expire>time()){throw new ValidException('验证码发送过于频繁,请稍后再试');}}
邮件或者短信发送过程中的消息提示

1:创建一个异常类:这个类会生成在app/Exceptions下

php artisan make:exception ValidException

2:构建一个系统规定的方法render;

 public function render(){//response也是系统制定的一个对象,不能变return response()->json(['code'=>$this->code,'message'=>$this->getMessage()],401);}

3:调用:

 public function checkexpire(){$expire=session('valid_code.expire');if($expire&&$expire>time()){//抛出异常 throw调用throw new ValidException('验证码发送过于频繁,请稍后再试');}}
针对复杂的验证规则,需要一个自定义表单请求的类:

1.创建表单请求类:这个请求是专为User类做验证的

php artisan make:request UserRequest;

2.在UserRequest这个类里的rules这个方法里写验证规则:

  public function rules(){return ['password'=>'required|confirmed','code'=>['required',//   $value是传递到account里的值//这种复杂的验证规则可以在function体里function ($attribute,$value,$fail){if($value !=session('valid_code.code')){return $fail('验证不正确');}return true;}]];}

3.在User类的需要此验证规则就引用这个验证,引用方式如下:

//UserRequest是表示在引用第二步的验证规则;public function store(UserRequest $request){//}
创建中间件:做验证拦截

1.创建中间件:

php artisan make:middleware AuthAdmin

2.在AuthAdmin类里的handle中写验证规则,做拦截:

 public function handle($request, Closure $next){//符合此方法的逻辑,才能通过,进行下一步,负责会被拦截if(!\Auth::check()||auth()->user()->is_admin!=1){return redirect('/');}return $next($request);}

3.调用中间件,要在路由组里调用:

//middleware:中间件
Route::group(['middleware'=>['admin.auth'],'prefix'=>'admin','as'=>'admin.','namespace'=>'Admin'],function (){Route::get('/','HomeController@index')->name('home.index');});

Laravel第二章相关推荐

  1. 王道考研 计算机网络笔记 第二章:物理层

    本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 第一章:王道考研 计算机网络笔记 第一章:概述&计算机网络体系结构 后续章节将陆续更新- 第二章 一.物 ...

  2. 计算机组成原理-第二章 数据表示与运算

    计算机组成原理-第二章 数据表示与运算 一.数据的表示 1.数值型数据的表示(重点难点) 1.1数值型数据的表示--进位制 1.2数值型数据表示-码制 1.3数值型数据的表示--定点数 1.4数值型数 ...

  3. 2021-08-08概率论与数理统计-第二章

    文章目录 概率论与数理统计-第二章 概率论与数理统计-第二章

  4. 软件构造 第二章 第一节 软件生命周期和版本控制

    软件构造第二章 第一节 软件生命周期和版本控制 基本内容 Software Development Lifecycle (SDLC) Traditional software process mode ...

  5. 第二节认识计算机教案,第二章 第二节 局域网的构建 教学设计_博客

    <第二章 第二节 局域网的构建 教学设计_博客>由会员分享,可在线阅读,更多相关<第二章 第二节 局域网的构建 教学设计_博客(3页珍藏版)>请在装配图网上搜索. 1.第二章 ...

  6. ArcGIS for Desktop入门教程_第二章_Desktop简介 - ArcGIS知乎-新一代ArcGIS问答社区

    原文:ArcGIS for Desktop入门教程_第二章_Desktop简介 - ArcGIS知乎-新一代ArcGIS问答社区 1 Desktop简介 1.1 ArcGIS for Desktop ...

  7. 第二章 序列比对——Needleman-Wunsch全局比对

    [生信]第二章 序列比对--Needleman-Wunsch全局比对 主要为基因组测序比对相关知识,部分内容作笔记自查使用.如有错误或遗漏还请海涵,可评论或邮箱联系. 最后修改时间:2020-04-0 ...

  8. 第二章 序列比对——Blast局部比对

    第二章 序列比对--Blast局部比对  阅读量: 330 主要为基因组测序比对相关知识,部分内容作笔记自查使用.如有错误或遗漏还请海涵,可评论或邮箱联系. 最后修改时间:2020-04-16 16: ...

  9. Learning Perl学习笔记(1)第二章Scalar Data

    If Control Structure(IF循环) 脚本如下: #!/usr/bin/perl use warnings; use strict; use v5.24; my $line = < ...

  10. 数学知识--Methods for Non-Linear Least Squares Problems(第二章)

    Methods for Non-Linear Least Squares Problems 非线性最小二乘问题的方法 2nd Edition, April 2004 K. Madsen, H.B. N ...

最新文章

  1. 零起点学算法03——超简单模仿算术题
  2. python生成100个随机数_Python_0——100闭区间产生3个随机数,两种方法排序
  3. 如何做到长时间(4 个小时以上)精神专注?
  4. Hierarchy-Viewer架构
  5. java中判断两个方法是否相同
  6. Tip:使用Extender的ResolveControlID事件
  7. C++描述杭电OJ 2023.求平均成绩 ||
  8. java第一次课必修实验答案,Java第一次实验报告
  9. 收藏 | 机器学习中需要了解的 5 种采样方法
  10. JSON 格式化 显示到页面中
  11. Java实现个人博客系统(附下载源码)
  12. 英雄联盟数据分析专题(一)
  13. Alfred神器使用手册
  14. xheditor漏洞 php,xheditor默认upload.php畸形文件上传漏洞
  15. windows的消息传递--消息盒子
  16. win7定时关机命令_只需9步教你轻松设置win7系统定时关机,无需任何工具
  17. Android权限Uri.parse的详细资料
  18. 微信小游戏排行榜制作(主域子域)
  19. 4字节 经纬度_北京54坐标系转经纬度坐标系教程
  20. 三坐标检测基础知识之RationalDMIS 2020 ,PC-DMIS 2019 点轮廓度(T值)算法说明

热门文章

  1. python二维插值_SciPy二元样条插值
  2. 超级马里奥【附源码】
  3. iredmail mysql 配置_CentOS下iRedMail安装配置
  4. html搜索框点击出现提示,js实现搜索提示框效果
  5. kylin 维度优化,Aggregation Group,Joint,Hierachy,Mandatory等解析
  6. linux连接Redis客户端
  7. pythonobject转int_object怎么转换成float数据
  8. Scratch实现打字游戏
  9. 2022年中级网络工程师备考(网络知识部分)
  10. VS2010 0xC000041D:用户回调期间遇到未经处理的异常