小程序实现Token生成与验证

 更新时间:2021年12月10日 09:53:59   作者:红尘炼炼心  
本文主要介绍了小程序实现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生成与验证内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • js Flash插入函数免激活代码

    js Flash插入函数免激活代码

    好多情况下flash会出现需要单击激活,不过一般新版本中直接插入随然不用激活但代码较多,下面的方法是个函数,其实代码也不少,不过思路很好,大家可以看看。
    2009-03-03
  • parabola.js抛物线与加入购物车效果的示例代码

    parabola.js抛物线与加入购物车效果的示例代码

    本篇文章主要介绍了parabola.js抛物线与加入购物车效果的示例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • uni-app的基本使用教程

    uni-app的基本使用教程

    uni-app​​​ 是一个使用 ​ ​Vue.js​​ 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、H5、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉)等多个平台,这篇文章主要介绍了uni-app的基本使用,需要的朋友可以参考下
    2022-11-11
  • 第一次接触神奇的Bootstrap导航条

    第一次接触神奇的Bootstrap导航条

    第一次接触神奇的Bootstrap导航条,Bootstrap让Web开发更迅速、更简单,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • 使用taro开发微信小程序遇到的坑总结

    使用taro开发微信小程序遇到的坑总结

    Taro,京东凹凸实验室出品的适配多端的一个框架,这篇文章主要介绍了使用taro开发微信小程序遇到的坑总结,需要的朋友可以参考下
    2019-04-04
  • js面向对象编程之如何实现方法重载

    js面向对象编程之如何实现方法重载

    如何实现方法重载,涉及到三个问题:同名函数的调用、函数中特殊的参数arguments、如何利用arguments实现方法重载,需要的朋友可以参考下
    2014-07-07
  • QQ跳转支付宝并自动领红包脚本(最新)

    QQ跳转支付宝并自动领红包脚本(最新)

    这篇文章主要给大家分享介绍了一个QQ跳转支付宝并自动领红包脚本,这个脚本应该是最新的,测试后是可以使用的,文中给出了完整的示例代码和使用方法,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-06-06
  • 关于IE、Firefox、Opera页面呈现异同 写脚本很痛苦

    关于IE、Firefox、Opera页面呈现异同 写脚本很痛苦

    关于IE、Firefox、Opera页面呈现异同 写脚本很痛苦,对于多浏览器的兼容性,需要注意。
    2009-08-08
  • JavaScript动态插入script的基本思路及实现函数

    JavaScript动态插入script的基本思路及实现函数

    偶尔需要动态插入javascript代码的需求,基本思路是动态创建一个script标签,设置其src属性,type属性等,需要的朋友可以参考下
    2013-11-11
  • JS实现点击复选框将按钮或文本框变为灰色不可用的方法

    JS实现点击复选框将按钮或文本框变为灰色不可用的方法

    这篇文章主要介绍了JS实现点击复选框将按钮或文本框变为灰色不可用的方法,涉及javascript动态修改页面元素属性的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08

最新评论