关于小程序的登录,那指定受不了JWT,大家要记得在框架中装好JWT去配置

下面就直接上代码

控制器:

<?phpnamespace App\Http\Controllers\api;use App\Http\Controllers\Controller;
use App\Models\Fillable;
use App\Models\User;
use App\Service\SendCode;
use App\Service\Token;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;class LoginController extends Controller
{protected $param;public function __construct(Request $request){$this->param = $request;}/*** 发送手机验证码*/public function sendCode(){$phone = $this->param['phone'];//验证if(!$phone || empty($phone)){return ['code'=>4000,'msg'=>'手机号不能为空','data'=>''];}//判断手机号格式$pregRes = preg_match_all('/^1[358]\d{9}$/',$phone);if(!$pregRes){return ['code'=>4000,'msg'=>'手机号格式不正确','data'=>''];}//判断该手机号是否为白名单$fillableId = Fillable::where('phone',$phone)->first();if(empty($fillableId)){return ['code'=>4000,'msg'=>'手机号无法登录','data'=>''];}//获取缓存$time = date('Y-m-d',cache()->get($phone.'_time'));$count = cache()->get($phone.'_count') ? : 0;//判断每天发送次数if($count>5){return ['code'=>4000,'msg'=>'发送已达上限','data'=>''];}//当天的时间$newDay = date('Y-m-d',time());if($newDay>$time){$count = 1;}else{$count++;}//生成验证码$captcha = rand(1300,9888);//发送手机号
//       $statusCode = (new SendCode())->sendCode($phone,$captcha);
//        //获取错误码对应的错误信息
//        $statusArr = config('code.status');
//        if($statusCode!=0){
//            return ['code'=>4005,'msg'=>$statusArr[$statusCode],'data'=>''];
//        }//存储到缓存中cache()->set($phone,$captcha,300);//5分钟后过期cache()->set($phone.'_time',time(),60*24);//记录最后一次发送时间cache()->set($phone.'_count',$count,60*24);//记录次数//return ['code'=>200,'msg'=>$statusArr[$statusCode],'data'=>$captcha];return ['code'=>200,'msg'=>'短信发送成功','data'=>$captcha];}/*** 手机号登录*/public function phoneLogin(){$param = $this->param->all();//验证$validate = Validator::make($param,['phone' => 'required','code' => 'required|min:4|max:4']);if($validate->fails()){$error = $validate->errors();return ['code'=>4000,'msg'=>$error->first(),'data'=>''];}//判断手机号格式$pregRes = preg_match_all('/^1[358]\d{9}$/',$param['phone']);if(!$pregRes){return ['code'=>4000,'msg'=>'手机号格式不正确','data'=>''];}//取出验证码$captcha = cache()->get($param['phone']);//验证码判断if($param['code'] != $captcha){return ['code'=>4002,'msg'=>'验证码错误','data'=>''];}//判断用户是否注册$userInfo = User::where('phone',$param['phone'])->first();if(!$userInfo){//执行注册$userInfo = User::create(['phone' => $param['phone']]);}//生成token$token = (new Token())->createToken($userInfo->id);cache()->set('uid',$userInfo->id,7200);return ['code'=>200,'msg'=>'登录成功','data'=>$token];}}

服务层的话,我封装了两个,一个是验证码的,另一个是验证token

<?phpnamespace App\Service;class SendCode
{public function sendCode($phone,$captcha){$smsapi = "http://api.smsbao.com/";$user = config('code.user'); //短信平台帐号$pass = config('code.pass'); //短信平台密码$content="《测试 短信内容》你的验证码是:".$captcha;//要发送的短信内容
//        $sendurl = $smsapi."sms?u=".$user."&p=".$pass."&m=".$phone."&c=".urlencode($content);$sendurl = sprintf(config('code.url'),$user,$pass,$phone,urlencode($content));$result =file_get_contents($sendurl);return $result;}
}
<?phpnamespace App\Service;use Firebase\JWT\JWT;class Token
{protected $key;public function __construct(){$this->key = 'xululu';}/*** 生成token*/public function createToken($uid){$time = time();$payload = array("iss" => "","aud" => "","iat" => $time,"nbf" => $time,"exp" => $time+7200,"uid" => $uid);//生成$token = JWT::encode($payload, $this->key);return $token;}/*** 验证token*/public function validateToken($token){try {//验证$decoded = JWT::decode($token, $this->key, array('HS256'));//返回用户idreturn $decoded->uid;}catch (\Exception $e){return 'token过期';}}
}

然后是前台小程序部分,这里的部分样式我是用了lin-ui,感兴趣的朋友可以去看一下

<view>要交友</view>
<view>社区交友大平台</view>
<view class="weui-cell weui-cell_input"><input class="weui-input" bindinput="phone" placeholder="手机号"/>
</view>
<view class="weui-cell weui-cell_input"><input class="weui-input" bindinput="code" placeholder="验证码"/><l-button size="mini" bindtap="sendCode" type="success">发送验证码</l-button>
</view><l-button class="btn" bindtap="login" size="medium">登录</l-button>
// pages/indexs/indexs.js
Page({/*** 页面的初始数据*/data: {phone: '',code: ''},/*** 生命周期函数--监听页面加载*/onLoad: function (options) {},phone(e) {let phone = e.detail.valuethis.setData({phone})},//同步验证码code(e) {this.setData({code: e.detail.value})},//发送验证码sendCode(){let phone = this.data.phone;wx.request({url: 'http://www.study.com/api/send',data:{phone},success:ret=>{wx.showToast({title: ret.data.msg,icon:'error'})}})},login() {let phone = this.data.phone;let code = this.data.code;wx.setStorageSync('phone', phone)wx.request({url: 'http://www.study.com/api/login',data:{phone,code},method:'POST',success:ret=>{let data = ret.data;if(data.code!=200){wx.showToast({title:data.msg,icon:'error'})return false;}//token存储到本地wx.setStorageSync('token',data.data);wx.showToast({title: '登录成功',icon: 'success',duration: 2000,success: function () {setTimeout(function () {//要延时执行的代码wx.navigateBack({delta: 1,})}, 2000) //延迟时间}})}})wx.showToast({title: '登录成功',icon: 'success',duration: 2000,success: function () {setTimeout(function () {//要延时执行的代码wx.navigateBack({delta: 1,})}, 2000) //延迟时间}})}})
{"usingComponents": {"l-button":"/miniprogram_npm/lin-ui/button"}
}
.weui-cell{display: flex;flex-direction: row;flex-wrap: nowrap;margin: 20px;padding-bottom: 5px;border-bottom: 1px #ccc solid;
}.btn{margin-left: 120px;margin-top: 30px;
}

这样的一个手机号验证码登录就写完了,有不会的或者有错误的地方欢迎找我哦

Laravel8 小程序手机号获取验证码登录相关推荐

  1. 小程序短信验证码登录,1分钟实现小程序发短信功能,借助云开发10行代码实现短信验证码登录小程序

    老规矩先看效果图 普通短信 验证码短信 今天被云开发官方告知,云开发支持发短信功能了,然后就迫不及待的来尝下鲜. 进入官方文档一看,云开发给咱们开发者的福利还真不小. 不仅仅可以很方便的使用短信功能, ...

  2. 微信小程序中短信验证码登录全流程及代码

    才开始学习小程序,用到短信验证码登录 免费注册账号: http://sms_developer.zhenzikj.com/zhenzisms_user/register.html 完整demo下载:  ...

  3. 微信小程序短信验证码 php,微信小程序中短信验证码登录全流程及代码

    才开始学习小程序,用到短信验证码登录,使用榛子云短信(smsow.zhenzikj.com) 效果: 我是java开发者,后端使用了springMvc 短信验证码实现流程 1.构造手机验证码,生成一个 ...

  4. 微信小程序短信验证码登录demo

    自己记录学习使用 html <view class="wrap"><view class="tel"><input type=&q ...

  5. 微信小程序之获取验证码js

    在微信小程序中怎样实现获取验证码的倒计时功能捏,倒计时的原理是一样一样的,就是某些地方需要注意. 第一步:结构 <view class='get-code' wx:if="{{!isS ...

  6. asp获取微信小程序用户手机号,asp微信小程序手机号获取,微信小程序手机号asp获取方法

    今天搞的这个项目里需要用到asp获取小程序用户的手机号,在网上找了下资源,一个也没有找到,难道用asp获取不到微信小程序用户的手机号码吗?非也,经过一系列操作,成功了,asp照样可以获取小程序用户的手 ...

  7. 微信小程序例子——获取用户登录信息

    1.效果展示 2.关键代码 .wxml布局文件代码 用户昵称:{{nickName}} 用户头像: 性别:{{sex}} 所在地址(省):{{province}} 所在地址(市):{{city}} . ...

  8. 【愚公系列】2022年09月 微信小程序-微信小程序实现网页一键登录功能

    文章目录 前言 一.微信小程序实现网页一键登录功能 1.旧版登录方法 2.新版登录方法 二.相关第三方包源码 前言 如果微信小程序要获取微信登录的用户信息,需要拿到code去后台换取用户信息,具体步骤 ...

  9. 微信小程序手机号注册获取验证码+验证判断

    微信小程序手机号注册获取验证码+验证判断 扫描二维码,进入首页,找到"小程序演示",效果类->手机号码注册效果,点击进入即可.

  10. uin-app 小程序,获取手机号

    uin-app 小程序,获取手机号 小程序获取手机号需要客户点击button触发 原生小程序的官方文档代码是 <button open-type="getPhoneNumber&quo ...

最新文章

  1. 服务器架设笔记——httpd插件支持mysql字符集选择
  2. s:property的用法
  3. 《构架之美》阅读笔记五
  4. 使用不可变对象创建值对象
  5. 例子简单说说C# ref和out
  6. python调用库函数用ecb模式加密图片_AES中ECB模式的加密与解密(Python3.7)
  7. dubbo protocol port 消费者端_企业级 SpringBoot 与 Dubbo 的并用
  8. 摄像头图像分析目标物体大小位置_对智能驾驶系统三种环境传感器布局的冗余关系分析...
  9. 受Struts2漏洞影响 思科正审查其主要产品安全性 CVE-2017-9805已有主动攻击
  10. iOS 获取系统相机相册
  11. 一款响应式的(电子报)Newsletter 模板 – Antwort
  12. 实验吧—Web——WP之 Forms
  13. 引力波应该称为空间波
  14. 计算机硬盘如何安装系统,电脑硬盘怎么装系统
  15. android开源库汇总
  16. css的语法结构由3部分组成,CSS语法
  17. CSS+DIV 网页重构技术
  18. html设计判断闰年,javascript如何判断是否为闰年?
  19. python将图片按照文件名分类,并移入相应文件夹
  20. 高精度地图:自动驾驶的向导

热门文章

  1. java 递归 数独,【算法、递归回溯解决数独】
  2. 有一行电文,已按以下规律译成密码: A-Z a-z B-Y b-y C-X c-x,即第一个字母变成第26个字母,第i个字母变成第(26-i+1)个字母,非字母字符不变。要求编程将密码译回原文,并
  3. linux音响会产生pulse文件,Linux声音系统和PulseAudio简介
  4. 笔记本电脑如何用c语言开无线网卡,教你如何用无线网卡做wifi热点(适用笔记本)...
  5. 基金购买和赎回线下业务
  6. 在你的ipad上使用Vscode撸代码(快速操作向)
  7. bilibili、腾讯视频下载方法及过程中遇到的一些问题
  8. 浅谈机器学习中的非线性
  9. Hdu-5769 Substring (SA后缀数组)
  10. go语言学习网站大全