laravel8中间件验证token 小程序手机验证码登录

在laravel8框架中除了登录的路由不用使用token验证,然后当我们进入其他控制器的时候都需要进行token验证,为了确保用户是否登录

首先我们需要先生成一个token中间件

php artisan make:middleware MiniLogin

在这里插入图片描述
如果想让多个路由继承这个中间件的话就设置一个分组中间件

  //设置小程序分组中间件
        'MiniLogin'=>[
          MiniLogin::class
        ],

在这里插入图片描述
然后在路由中让想继承的路由进行继承

//小程序分组中间件
Route::group(['middleware'=>['MiniLogin']],function (){
    //列表
    Route::get('liebiao',[\App\Http\Controllers\LiebiaoController::class,'liebiao'])->name('liebiao');
});

小程序调用接口获取手机验证码请参考:

https://blog.csdn.net/stringQiang/article/details/117406574

当用户登录成功后生成token

composer require firebase/php-jwt
//签发Token
    public function lssue(Request $request)
    {
        $user =$request->session()->get('user') ; //key
        $key = '1314'; //key
        $time = time(); //当前时间
        $token = [
            'iss' => 'http://www.helloweba.net', //签发者 可选
            'aud' => 'http://www.helloweba.net', //接收该JWT的一方,可选
            'iat' => $time, //签发时间
            'nbf' => $time , //(Not Before):某个时间点后才能访问,比如设置time+30,表示当前时间30秒后才能使用
            'exp' => $time+7200, //过期时间,这里设置2个小时
            'data' => [ //自定义信息,不要定义敏感信息
                'id' => $user['id'],
                'phone' => $user['phone']
            ]
        ];
        return JWT::encode($token, $key); //输出Token
    }

这里比如需要在小程序列表进行token验证,则需要在小程序js中的自动加载方法中将登录成功存入缓存的token取出来然后一块传入后台。

小程序跳转到tabar页面的方法
在这里插入图片描述

/**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    //因为后台做了jwt的token验证,索引这里需要将存入缓存的token取出来然后发送到后台做一个安全验证
    var jwt=wx.getStorageSync('jwt');
    if(jwt ==""){
      //这里需要注意的是wxwx.navigateTo只能跳转普通的页面,如果跳转tabar页面是没有反应的,如果非得跳转tabar页面,可以使用wx.switcaTab方法
      wx.switchTab({
        url: '/pages/index/index',
      })
      return false;
    }
    var _thih=this;
      wx.request({
        url: 'http://day531.week2.com/liebiao',
        data:{
          page:_thih.data.page,
          limit:_thih.data.limit,
          token:jwt
        },
      
        success:function(res){
          //console.log(res.data.data.data)
          var add = res.data.data.data;
          var count = res.data.data.total;
          //console.log(count)
          _thih.setData({
            data:add,
            count:count
          });
        }
      })
  },

然后在从小程序中获取过来的token进行解析验证用户id

use \Firebase\JWT\JWT; //导入JWT

 public function handle(Request $request, Closure $next)
    {
        //将用户从小程序js中发送过来的token接收过来,然后进行一个验证
        $jwt=$request->input('token');
        //print_r($jwt);die();.
        $key = '1314'; //key要和签发的时候一样
            JWT::$leeway = 60;//当前时间减去60,把时间留点余地
            $decoded = JWT::decode($jwt, $key, ['HS256']); //HS256方式,这里要和签发的时候对应
            //$uid=$decoded->data->userid;
            $arr = (array)$decoded;
            $id=$arr['data']->id;
           //从session中获取出来登录成功存入的用户id,进行对比,解析出来的id和登录成功存入session中的id一样则整明是同一用户在登录
            $res=$request->session()->get('user');
            $ids=$res['id'];
            if ($ids == $id){
                //因为小程序走的是接口,所以这里因该返回三要素,然后小程序js拿到值之后再惊醒相应的操作
                return ['code'=>200,'data'=>$res];
            }else{
                return ['code'=>502,'data'=>''];
            }
    }
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值