zoukankan      html  css  js  c++  java
  • Lumen 实现接口 Captcha图片验证码功能

    安装

    composer require youngyezi/captcha

    使用

    新版的包已经删除了 session 支持,完全交给业务自由选择存储方式

    个人觉得这样更方便来解耦业务,尤其 Lumen 大多时候用来做 Api 开发,并不需要开启 Session 服务

    注册服务 bootstrapapp.php

    $app->register(YoungyeziCaptchaCaptchaServiceProvider::class);
    
    
    // 添加别名
    $app->alias('captcha', 'YoungyeziCaptchaCaptchaServiceProvider');

    配置文件

    复制 vendorYoungyeziCaptchaconfigcaptcha.php 文件至 项目 config 文件下

    For Example

    验证码生成

    //  创建验证码
    //  配置文件 key($config)
    //  返回值包括一base_64加密的图片和一key
    $data = app('captcha')->create();
        
    //  自定义储存 key (如 redis ,session 等)
    
    ....
    
    //  返回验证码图片 img

    生成的base64可以用这个站点转换 站点链接

     验证码校验

    // 通过 code 和 key 来校验
    $captcha = $request->input('captcha');
    
    // 获取自定义存储的 key 值
    $key = { ... };
        
    if(app('captcha')->check($captcha, $key) === false) {
           //校验失败
    }
      /*
         * 用户注册
         */
        public function register()
        {
            $input = Input::get();
            if(!isset($input['username']) || empty($input['username']) ||
                !isset($input['iponenumber']) || empty($input['iponenumber']) ||
                !isset($input['password']) || empty($input['password']) ||
                !isset($input['key']) || empty($input['key']) ||
                !isset($input['captcha']) || empty($input['captcha'])
            ){
                return response()->json(['code'=>3,'msg'=>'参数缺失']);
            }
    
            if(!$this->check($input['key'],$input['captcha'])){
                return response()->json(['code'=>20000,'msg'=>'输入验证码错误']);
            }
    
            if(DB::table('user')->where('iponenumber',$input['iponenumber'])->first()){
                return response()->json(['code'=>20001,'msg'=>'手机号已注册']);
            }
    
            $insert = DB::table('user')->insert(['username'=>htmlspecialchars($input['username']),'iponenumber'=>$input['iponenumber'],'password'=>Hash::make($input['password'])]);
            if($insert){
                return response()->json(['code'=>0,'msg'=>'注册成功']);
            }else{
                return response()->json(['code'=>20002,'msg'=>'注册失败']);
            }
        }
    
        /*
         * 图片验证码
         * 返回值包括一个base_64加密的图片和一个key
         */
        public function captchaInfo()
        {
            $result = app('captcha')->create();
            Cache::put($result['key'],$result['key'],60);
            if(isset($result['sensitive'])){
                unset($result['sensitive']);
            }
            return response()->json(['code'=>0,'msg'=>'成功','data'=>$result]);
        }
    
        /**
         * @params key,captcha
         * 两个参数key和验证码
         */
        private function check($key,$captcha)
        {
            return app('captcha')->check(strtolower($captcha),Cache::get($key));
        }
    自己封装使用的demo

    https://github.com/Youngyezi/captcha

  • 相关阅读:
    C#消息筛选实现自动锁屏功能
    C#Path目录路径常用操作
    WPFMVVMLight框架学习使用MVVMLight
    C#使用SqlSugar操作数据库导致的问题:托管调试助手“FatalExecutionEngineError”:运行时遇到了 错误。此错误的地址为。。。。
    django—admin 使用simpleui自定义左边菜单栏及去除simple的广告链接
    bcdedit
    Ubuntu中root用户和user用户的相互切换
    ubuntu创建、删除文件及文件夹,强制清空回收站方法
    javascript 内存监测工具
    常用前端开发工具合集
  • 原文地址:https://www.cnblogs.com/niuben/p/11765241.html
Copyright © 2011-2022 走看看