Laravel第二章

本文详细介绍如何在Laravel框架中实现随机验证码的生成、存储及验证,包括邮件和短信发送验证码的过程,以及如何设置验证码过期时间。同时,文章还讲解了如何创建自定义表单请求类和中间件来增强应用的安全性和功能性。

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

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');

});
内容概要:文章以“智能网页数据标注工具”为例,深入探讨了谷歌浏览器扩展在毕业设计中的实战应用。通过开发具备实体识别、情感分类等功能的浏览器扩展,学生能够融合前端开发、自然语言处理(NLP)、本地存储与模型推理等技术,实现高效的网页数据标注系统。文中详细解析了扩展的技术架构,涵盖Manifest V3配置、内容脚本与Service Worker协作、TensorFlow.js模型在浏览器端的轻量化部署与推理流程,并提供了核心代码实现,包括文本选择、标注工具栏动态生成、高亮显示及模型预测功能。同时展望了多模态标注、主动学习与边缘计算协同等未来发展方向。; 适合人群:具备前端开发基础、熟悉JavaScript和浏览器机制,有一定AI模型应用经验的计算机相关专业本科生或研究生,尤其适合将浏览器扩展与人工智能结合进行毕业设计的学生。; 使用场景及目标:①掌握浏览器扩展开发全流程,理解内容脚本、Service Worker与弹出页的通信机制;②实现在浏览器端运行轻量级AI模型(如NER、情感分析)的技术方案;③构建可用于真实场景的数据标注工具,提升标注效率并探索主动学习、协同标注等智能化功能。; 阅读建议:建议结合代码实例搭建开发环境,逐步实现标注功能并集成本地模型推理。重点关注模型轻量化、内存管理与DOM操作的稳定性,在实践中理解浏览器扩展的安全机制与性能优化策略。
基于Gin+GORM+Casbin+Vue.js的权限管理系统是一个采用前后端分离架构的企业级权限管理解决方案,专为软件工程和计算机科学专业的毕业设计项目开发。该系统基于Go语言构建后端服务,结合Vue.js前端框架,实现了完整的权限控制和管理功能,适用于各类需要精细化权限管理的应用场景。 系统后端采用Gin作为Web框架,提供高性能的HTTP服务;使用GORM作为ORM框架,简化数据库操作;集成Casbin实现灵活的权限控制模型。前端基于vue-element-admin模板开发,提供现代化的用户界面和交互体验。系统采用分层架构和模块化设计,确保代码的可维护性和可扩展性。 主要功能包括用户管理、角色管理、权限管理、菜单管理、操作日志等核心模块。用户管理模块支持用户信息的增删改查和状态管理;角色管理模块允许定义不同角色并分配相应权限;权限管理模块基于Casbin实现细粒度的访问控制;菜单管理模块动态生成前端导航菜单;操作日志模块记录系统关键操作,便于审计和追踪。 技术栈方面,后端使用Go语言开发,结合Gin、GORM、Casbin等成熟框架;前端使用Vue.js、Element UI等现代前端技术;数据库支持MySQL、PostgreSQL等主流关系型数据库;采用RESTful API设计规范,确保前后端通信的标准化。系统还应用了单例模式、工厂模式、依赖注入等设计模式,提升代码质量和可测试性。 该权限管理系统适用于企业管理系统、内部办公平台、多租户SaaS应用等需要复杂权限控制的场景。作为毕业设计项目,它提供了完整的源码和论文文档,帮助学生深入理解前后端分离架构、权限控制原理、现代Web开发技术等关键知识点。系统设计规范,代码结构清晰,注释完整,非常适合作为计算机相关专业的毕业设计参考或实际项目开发的基础框架。 资源包含完整的系统源码、数据库设计文档、部署说明和毕
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值