小程序实现Token生成与验证

目录
  • 流程
  • 演示
    • 小程序端
    • 后端接口

流程

每次请求接口携带token,进行验证
1.验证成功则返回接口数据
2.验证失败(token过期),小程序重新请求生成新的token,然后请求之前的接口

key值: 随机数+时间戳+盐
value值: id+session_key+openid

演示

小程序端

<view>
  <button bindtap="loadToeknData">携带token请求数据</button>
</view>
Page({
  data: {
  },

  onLoad:function(){
    // this._loadData();
  },

  //生成token
  setToken:function(callback){
    // wx.setStorageSync('token', "sfspx64w8x47w14x3zX4x4wf4")
    var that = this;
    wx.request({
      url: 'http://2021xcx-api.com/api/gettoken',
      method: 'POST',
      success: function(res){
        console.log(res.data);
        var data = res.data;
        if(data.code==1){
          //更新新获取的token值
          wx.setStorageSync('token', data.token);
          // 执行回调函数
          callback&&callback()
        }else{
          that.setToken();
        }
      }
    })
  },
 loadToeknData:function(){
   var that = this;
    wx.request({
      url: 'http://2021xcx-api.com/api/orders',
      method: 'POST',
      header: {
        'content-type': 'application/json',
        'token': wx.getStorageSync('token')
      },
      success: function(res){
        var data = res.data;
        console.log(data)
        if(data.code==903){
          // token过期,重新请求设置
          // 携带回调函数,token重新获取后继续执行此方法。
          that.setToken(that.loadToeknData)
        }
      }
    })
  },
})

  

后端接口

路由配置

<?php
Route::post("api/orders", "api/index/getOrders");
// Token
Route::post("api/gettoken", "api/token/createToken");

Index.php

<?php
namespace app\api\controller;
use app\api\controller\Token;
use think\Cache;

class Index extends Token
{
    public function getOrders(Token $token){
        $token->verifyToken();

        $data['orders'] = [
            'id' => 1,
            'title' => 'apple',
            'time' => time()
        ];
        echo json_encode($data);

    }
}

Token.php

<?php
namespace app\api\controller;
use think\Controller;

class Token extends Controller
{
    protected $returnParam = [
        'code' => 1,
        'msg' => '请求失败'
    ];

    /**
     * [verifyToken 验证Token是否携带并存在]
     * @return [type] [description]
     */
    public function verifyToken(){
        $token = request()->header()['token'];
        $isSetToken = cache($token);
        // dump($isSetToken);die;
        if(!$isSetToken){
            $this->returnParam['code'] = 903;
            $this->returnParam['msg'] = "Token验证失败";
            echo json_encode( $this->returnParam );die;
        }
    }

    /**
     * [createToken Token生成]
     * tip:token中记录用户ID/session_kye/openid
     * @return [type] [description]
     */
    public function createToken()
    {
        $randStr = rand(1,9999);
        $time = time();
        $sale = "xixi2021";

        // * 此处模拟--未请求微信接口进行sessionkey及openid的获取
        $tokenValue = [
            'uid' => 1,
            'session_key' => '84848aasa',
            'openid' => '20oxl65wc4d4s5x7hwc',
            'code' => 'sssaaeee'
        ];
        $tokenKey = md5($randStr.$time.$sale);
        //缓存存储token数据
        cache($tokenKey, json_encode($tokenValue), 1);

        $returnParam = [
            'code' => 1,
            'token' => $tokenKey
        ];
        echo json_encode($returnParam);
    }

}

到此这篇关于小程序实现Token生成与验证的文章就介绍到这了,更多相关小程序 Token生成与验证内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 关于微信小程序爬虫token自动更新问题

    目录 一.微信模拟点击 二.配置fiddler获取请求头的信息写到本地文件 三.主爬虫业务代码 现在很多的app都很喜欢在微信或者支付宝的小程序内做开发,毕竟比较方便.安全.有流量.不需要再次下载app,好多人会因为加入你让他下载app他会扭头就走不用你的app,毕竟做类似产品的不是你一家. 之前做过很多微信小程序的爬虫任务,今天做下记录,防止很久不用后就会忘记,微信小程序分为两大类: 1.是不需要登录的(这种的话不做分析,毕竟没什么反爬) 2.需要登录的 2.1 登录一次之后token永久有效

  • 微信小程序url与token设置详解

    微信小程序url与token设置详解 新浪云应用sae的代码里创建一个weixin.php文件,写入以下代码 define("TOKEN","myToken");// 后台填写的token,在微信公众平台启用 $wechatObj = new wechatAPI(); $wechatObj->isValid(); class wechatAPI { public function isValid()//验证微信接口,验证函数以外的代码和微信公众号开发token

  • 微信小程序登录换取token的教程

    前言: 这次主要是介绍些业务逻辑,技术点倒是没有多少.不过在开发中,优秀的编程思路同样是非常值得学习的. 最近小程序可以说在开发届狠狠的火了一把.微信小程序可以开发游戏,腾讯率先带头,做出了一个跳一跳也是点爆朋友圈.所谓落后就要挨打,那么今天就开始学习小程序的一些小知识吧(本文基于十年磨一剑的tp5) 目录: 微信登录换取token的流程 如何将code变成openid和session_key 抛出错误异常和派发令牌 一:微信登录换取token的流程 多说无益,直接上图 小程序获取token.p

  • 微信小程序如何处理token过期问题

    目录 先说结论 问题 解决方案 使用Promise封装回调函数 总结 先说结论 业务流程:  从网络日志中检查到token过期,则跳转到登录页面,要求用户重新登录. 代码逻辑:使用自定义的HttpUtil封装wx.request API,全局捕获过期token并自动处理后,下发给上层业务. 问题 Token过期的现象: 在网络请求中,客户端token会过段时间过期,使得后续的网络请求失败,抛出异常日志如下: data: {code: "99997", date: 16341748313

  • 小程序开发实现access_token统一管理

    目录 TOKEN 定时刷新器 一.背景 二.access_token的内部设计 2.1 access_token的时效性 2.2 access_token 的逐渐失效性 三.access_token的统一管理 参考文档 TOKEN 定时刷新器 一.背景 对于使用过公众平台的API功能的开发者来说,access_token绝对不会陌生,它就像一个打开家门的钥匙,只要拿着它,就能使用公众平台绝大部分的API功能.因此,对于开发者而言,access_token的使用方式就变得尤其的重要.在日常API接

  • 小程序实现Token生成与验证

    目录 流程 演示 小程序端 后端接口 流程 每次请求接口携带token,进行验证 1.验证成功则返回接口数据 2.验证失败(token过期),小程序重新请求生成新的token,然后请求之前的接口 key值: 随机数+时间戳+盐 value值: id+session_key+openid 演示 小程序端 <view> <button bindtap="loadToeknData">携带token请求数据</button> </view> P

  • 微信小程序实现简单input正则表达式验证功能示例

    本文实例讲述了微信小程序实现简单input正则表达式验证功能.分享给大家供大家参考,具体如下: 1.效果展示 2.关键代码 index.wxml文件 <input placeholder="输入内容" bindinput="check"></input> <view>输入结果:{{result}}</view> index.js文件 Page({ data:{ result:'' }, check:function(e

  • 微信小程序实现基于三元运算验证手机号/姓名功能示例

    本文实例讲述了微信小程序实现基于三元运算验证手机号/姓名功能.分享给大家供大家参考,具体如下: wxml部分: <view class="fl_form" style="position:relative;padding-top:20rpx;"> <text><text style="color:red;padding-right:10rpx">*</text>您的姓名</text> &

  • 微信小程序将字符串生成二维码图片的操作方法

    最近接到这样一个需求,需要在小程序里将十几位随机字符串转换为二维码的形式展示.公众号中(另一终端)调用JSSDK扫一扫功能,去扫描小程序生成的二维码.得到字符串,然后进行接下来的逻辑处理. 下面记录的是小程序中生成二维码图片这一操作,用的是原文作者改版后的生成二维码工具weapp-qrcode.js(demo的众多文件中只需将util下的这个文件拷贝到自己项目中),可在原文地址里clone demo. 截图(copy原文) 使用 1.页面wxml中放置绘制二维码的canvas 加入点击改变二维码

  • 微信小程序分享小程序码的生成(带参数)以及参数的获取

    1.小程序码介绍 从微信小程序开发文档上我们可以了解到,目前微信支持两种二维码(左),小程序码和小程序二维码(右).官方推荐使用小程序码,因为小程序码具有更好的辨识度. 官方提供生成小程序码的两种方式 一种适用于需要的码的数量相对较少的业务场景:接口地址 https://api.weixin.qq.com/wxa/getwxacode?access_token=ACCESS_TOKEN access_token是公众号的全局唯一接口调用凭据. 获取access_token方法详见:https:/

  • 微信小程序点击生成朋友圈分享图(遇到的坑)

    上个月boss交给我个微信小程序的活,告诉我只需要负责前端页面这块,问我多久做完,于是我不知天高地厚的说 一礼拜就能完工,哈哈哈,果然,现实总是那么无情的来打脸了...磨磨蹭蹭一共用了将近3个礼拜才算完事. 今天就来总结下遇到的各种坑好了~~~ 由于做的是仿照包你说的小程序,这里就借用包你说的截图好啦 (这个做出来是模拟器跟真机上都会显示生成的图片的,鬼知道是为啥..) 唔,不废话了,直接上代码好啦 A:wxml(一定要加上image标签,如果你没有加的话,那么即使图片生成了,在页面上也是不会显

  • 微信小程序开发之表单验证WxValidate使用

    微信小程序的开发框架个人感觉大体上跟VUE是差不多的,但是他的表单组件没有自带的验证功能,因此开发小程序的表单验证时候一般有两种方法,一是自己裸写验证规则,但是需要比较扎实的正则表达式基础,一种是利用官方社区开发的WxValidate插件进行表单验证. WxValidate插件是参考 jQuery Validate 封装的,为小程序表单提供了一套常用的验证规则,包括手机号码.电子邮件验证等等,同时提供了添加自定义校验方法,让表单验证变得更简单. 首先插件的下载地址和官方文档都在WxValidat

  • 微信小程序实现登陆注册滑块验证

    目录 一.创建自定义组件MoveVerify 二.在index页面使用 本文实例为大家分享了微信小程序实现登陆注册滑块验证的具体代码,供大家参考,具体内容如下 一.创建自定义组件MoveVerify MoveVerify.js Component({   /**    * 组件的属性列表    */   properties: {     },     /**    * 组件的初始数据    */   data: {     x: 0,     oldx: 0,     isOk: false,

随机推荐