1、验证码发送

调用 Sms 中的 send   /*** 调用 Sms 中的 send** @param string $mobile 手机号* @param string $event 事件*/public function code(){$mobile = $this->request->request('mobile');$event = $this->request->request('event');if (!$mobile || !$event) {$this->error(__('手机号、事件不能为空'));}if ($mobile && !Validate::regex($mobile, "^1\d{10}$")) {$this->error(__('手机号不正确'));}$code = Sms::send($mobile,$code = null, $event);if ($code) {$this->success(__('验证码发送成功'));} else {//$this->success(__('验证码发送失败'));$this->error(__('验证码发送失败'));}}Sms 中的 send/*** 发送验证码** @param   int    $mobile 手机号* @param   int    $code   验证码,为空时将自动生成4位数字* @param   string $event  事件* @return  boolean*/public static function send($mobile, $code = null, $event = 'default'){$code = is_null($code) ? mt_rand(1000, 9999) : $code;$time = time();$ip = request()->ip();$sms = \app\common\model\Sms::create(['event' => $event, 'mobile' => $mobile, 'code' => $code, 'ip' => $ip, 'createtime' => $time]);$result = Hook::listen('sms_send', $sms, null, true);if (!$result) {$sms->delete();return false;}return true;}Hook 中的 listen/*** 监听标签的行为* @access public* @param  string $tag    标签名称* @param  mixed  $params 传入参数* @param  mixed  $extra  额外参数* @param  bool   $once   只获取一个有效返回值* @return mixed*/public static function listen($tag, &$params = null, $extra = null, $once = false){$results = [];foreach (static::get($tag) as $key => $name) {$results[$key] = self::exec($name, $tag, $params, $extra);// 如果返回 false,或者仅获取一个有效返回则中断行为执行if (false === $results[$key] || (!is_null($results[$key]) && $once)) {break;}}return $once ? end($results) : $results;}

(1)sms数据库

CREATE TABLE `zt_sms` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',`event` varchar(30) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '事件',`mobile` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '手机号',`code` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '验证码',`times` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '验证次数',`ip` varchar(30) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'IP',`createtime` int(10) unsigned DEFAULT '0' COMMENT '创建时间',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=141 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=COMPACT COMMENT='短信验证码表';

2、用户注册

    /*** 用户注册** @param string $username 用户名* @param string $password 密码* @param string $email    邮箱* @param string $mobile   手机号* @param string $code   验证码*/public function register(){$username = $this->request->request('username');$password = $this->request->request('password');$email = $this->request->request('email');$mobile = $this->request->request('mobile');$code = $this->request->request('code');if (!$username || !$password) {$this->error(__('用户名、密码不能为空'));}if ($email && !Validate::is($email, "email")) {$this->error(__('邮箱格式错误'));}if ($mobile && !Validate::regex($mobile, "^1\d{10}$")) {$this->error(__('手机号格式错误'));}$ret = Sms::check($mobile, $code, 'register');if (!$ret) {$this->error(__('验证码不正确'));}$ret = $this->auth->register($username, $password, $email, $mobile, []);if ($ret) {$data = ['userinfo' => $this->auth->getUserinfo()];$this->success(__('注册成功'), $data);} else {$this->error($this->auth->getError());}}Sms 中的 check/*** 校验验证码** @param   int    $mobile 手机号* @param   int    $code   验证码* @param   string $event  事件* @return  boolean*/public static function check($mobile, $code, $event = 'default'){$time = time() - self::$expire;$sms = \app\common\model\Sms::where(['mobile' => $mobile, 'event' => $event])->order('id', 'DESC')->find();if ($sms) {if ($sms['createtime'] > $time && $sms['times'] <= self::$maxCheckNums) {$correct = $code == $sms['code'];if (!$correct) {$sms->times = $sms->times + 1;$sms->save();return false;} else {$result = Hook::listen('sms_check', $sms, null, true);return $result;}} else {// 过期则清空该手机验证码self::flush($mobile, $event);return false;}} else {return false;}}Auth 中的 register/*** 注册用户** @param string $username 用户名* @param string $password 密码* @param string $email    邮箱* @param string $mobile   手机号* @param array  $extend   扩展参数* @return boolean*/public function register($username, $password, $email = '', $mobile = '', $extend = []){// 检测用户名、昵称、邮箱、手机号是否存在if (User::getByUsername($username)) {$this->setError('用户名已存在');return false;}if (User::getByNickname($username)) {$this->setError('昵称已存在');return false;}if ($email && User::getByEmail($email)) {$this->setError('邮箱已存在');return false;}if ($mobile && User::getByMobile($mobile)) {$this->setError('手机号已存在');return false;}$ip = request()->ip();$time = time();$data = ['username' => $username,'password' => $password,'email'    => $email,'mobile'   => $mobile,'level'    => 1,'score'    => 0,'avatar'   => '',];$params = array_merge($data, ['nickname'  => preg_match("/^1[3-9]{1}\d{9}$/",$username) ? substr_replace($username,'****',3,4) : $username,'salt'      => Random::alnum(),'jointime'  => $time,'joinip'    => $ip,'logintime' => $time,'loginip'   => $ip,'prevtime'  => $time,'status'    => 'normal']);$params['password'] = $this->getEncryptPassword($password, $params['salt']);$params = array_merge($params, $extend);//账号注册时需要开启事务,避免出现垃圾数据Db::startTrans();try {$user = User::create($params, true);$this->_user = User::get($user->id);//设置Token$this->_token = Random::uuid();Token::set($this->_token, $user->id, $this->keeptime);//设置登录状态$this->_logined = true;//注册成功的事件Hook::listen("user_register_successed", $this->_user, $data);Db::commit();} catch (Exception $e) {$this->setError($e->getMessage());Db::rollback();return false;}return true;}

(2)user数据库

CREATE TABLE `zt_user` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',`group_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '组别ID',`username` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '用户名',`nickname` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '昵称',`password` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '密码',`salt` varchar(30) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '密码盐',`ali_pay` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '支付宝账号',`true_name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '真实姓名',`email` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '电子邮箱',`mobile` varchar(11) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '手机号',`avatar` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '头像',`level` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '等级',`gender` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '性别',`birthday` date DEFAULT NULL COMMENT '生日',`bio` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '格言',`money` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '余额',`score` int(10) NOT NULL DEFAULT '0' COMMENT '积分',`successions` int(10) unsigned NOT NULL DEFAULT '1' COMMENT '连续登录天数',`maxsuccessions` int(10) unsigned NOT NULL DEFAULT '1' COMMENT '最大连续登录天数',`prevtime` int(10) DEFAULT NULL COMMENT '上次登录时间',`logintime` int(10) DEFAULT NULL COMMENT '登录时间',`loginip` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '登录IP',`loginfailure` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '失败次数',`joinip` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '加入IP',`jointime` int(10) DEFAULT NULL COMMENT '加入时间',`createtime` int(10) DEFAULT NULL COMMENT '创建时间',`updatetime` int(10) DEFAULT NULL COMMENT '更新时间',`token` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'Token',`status` varchar(30) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '状态',`verification` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '验证',PRIMARY KEY (`id`),KEY `username` (`username`),KEY `email` (`email`),KEY `mobile` (`mobile`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=COMPACT COMMENT='会员表';

fastadmin_短信宝插件_验证码发送、注册、登录相关推荐

  1. thinkphp6 短信宝/腾讯云发送手机号验证码

    短信接口 场景:通常在使用手机号注册时需要发送短信验证码,在修改密码等敏感操作时也需要验证手机号发送短信验证码. 短信验证码的目的:验证用户的身份是否本人 在项目代码中发送短信,通常要调用第三方短信商 ...

  2. python --- 短信接口开发手机验证码发送

    现在网络环境下,基本上任何网站注册都会验证手机号,已达到防止机器人注册的目的.除此之外短信群发,查询回复,找回密码等相关功能也需要短信验证码功能.那么网站的验证码发送是如何实现的呢?现在我们学习一下( ...

  3. NIUSHOP商城系统短信宝短信插件

    配置方式: 一:本插件针对NIUSHOP商城程序开发,插件内的所有文件除Smsbao.php文件外,均为对原文件的修改,如果你的系统经过二次开发,安装本插件之前,请仔细核对修改. 二:把下载好的NIU ...

  4. WordPress安装短信宝短信插件教程

    wordpress v4.x utf8 短信宝插件-1.0基础版下载 wordpress v4.x utf8 短信宝插件-1.1加强版下载 wordpress v5.x utf8 短信宝插件-1.2下 ...

  5. WordPress短信宝短信插件

    WordPress是使用PHP语言开发的博客平台,也可以把 WordPress当作一个内容管理系统(CMS)来使用.它是使用PHP语言和MySQL数据库开发的.WordPress有许多第三方开发的免费 ...

  6. php对接短信宝,DEDECMS短信宝短信插件

    配置方式: 一. 登入dedecms的后台,选择系统 -> 会员设置 -> 在是否开启会员功能选择"是".保存. 二.在系统 -> sql命令行工具 –> ...

  7. 青柚im安装短信宝短信插件教程

    青柚im短信宝插件下载 1:安装本插件直接覆盖系统原文件,本插件内所有文件均系短信宝在系统原文件的基础上进行了部分修改,如果您的系统经过二次开发,安装本插件之前请您仔细核对插件文件,以免造成不便. 2 ...

  8. DsMall商城新增短信宝短信接口

    DSMall基于国内优秀开源框架THinkPHP.打造出的一套开源的B2B2C电子商务系统.小编带着大家一起开发DSMall商城2.5.3的短信宝插件接口.我们使用的短信接口是短信宝短信群发平台的短信 ...

  9. TP5 短信宝 发送短信验证码

    一.请求发送短信接口 public function sendCode(){//接收手机号$data['phone'] = input('get.phone');//判断是否接到手机号$validat ...

最新文章

  1. 两个软件相互交换数据_面试需要知道的六种数据结构
  2. php代码审计2全局变量和超全局变量
  3. Android之Android:layout_weight详解
  4. 使用计算机来解决实际问题首先要完成,《操作系统》试题库-填空题
  5. Web之路笔记之三 - 使用Floating实现双栏样式
  6. js 复制图片到剪切板 和 js复制文本到剪切板
  7. Python Excel 批量生成二维码
  8. CheckBoxPreference--数据存储
  9. 【机械】如何用SOLIDWORKS进行ArtCam雕刻机排版
  10. ​新型冠状病毒是对未来自我隔离的预演?
  11. 银行贷款违约风险预测
  12. google有自定义文章流畅度的伪原创工具吗
  13. ChemDraw绘制DNA结构的技巧
  14. 基于自抗扰控制ADRC的主动悬架控制
  15. 如何使用 WEB 技术编写前端代码,实现大屏展示和地图显示功能
  16. TechCrunch Disrupt大会:YouTube创始人陈士骏专访
  17. DCM4CHE解压缩的DICOM文件
  18. 如何通过百度指数分析用户的真实需求?
  19. 前端扑街仔的nginx配置
  20. 飞腾FT-2000/4处理器+复旦微FPGA+国产操作系统解决方案

热门文章

  1. 三极管工作原理_「硬见小百科」半导体三极管的工作原理
  2. 锐捷客户端总是自动关闭VMware NAT Service 解决办法
  3. JVM技术细节: HotSpot的内存模型
  4. Facebook营销常犯的错误,看看你中招了吗?
  5. red flag linux是应用软件吗,RedFlag Desktop Linux 10(红旗Linux 10)的新功能/特性介绍...
  6. 腾讯QQ,msn,百度Hi,淘宝的用户链接及网页在线客服代码
  7. 关于编译过程中生成的中间文件和库文件
  8. 迅为恩智浦i.MX8MM开发平台虚拟机安装Ubuntu16.04系统
  9. javascript中变量的内存分配,以及const VS let
  10. Zwave Gen7 不加网不断发送命令