微信小程序授权登录

需要的数据库字段:openid,nickName,session_key

 

在app\Http\Middleware\VerifyCsrfToken.php文件里面的

protected $except = [
//
"*", //
];
需要加“*”,不然微信开发者工具报419错误

 

 需要Token,去官网现在jwt的扩展

JSON Web Token Libraries - jwt.io

在app下面创建一个server目录

接着新建一个Token类

下面是封装Token的代码

<?php

namespace App\server;
 use Firebase\JWT\JWT;
 use Firebase\JWT\Key;
class Token
{
    //生成token
    public function setToken($uid,$times=3600){
        $key = 'example_key';
        $payload =[
            'uid'=>$uid,
            'times'=>$times,
        ];
        $token=JWT::encode($payload,$key,'HS256');
        return $token;

    }


    //验证token
    public function getToken($token){
        $key='example_key';
        $decoded=JWT::deccode($token,new Key($key,'HS256'));
        return(array) $decoded;
    }

}

创建一个控制器 php artisan make:controller WechatController

创建一个模型,连接登录表   php artisan make:model Login

下面数控制器的代码

public function login(Request $request){
        $data=$request->post();
        $code=$data['code'];
        //你的小程序appid
        $Appid="";
        //你的小程序密钥
        $AppSecret="";
        $loginurl="https://api.weixin.qq.com/sns/jscode2session?appid=$Appid&secret=$AppSecret&js_code=$code&grant_type=authorization_code";
        $res=json_decode(file_get_contents($loginurl),true);
        $login=[
            'openid' => $res['openid'],
            'session_key'=>$res['session_key'],
            'nickName'=>$data['nickName'],
        ];
        //Login是你自己的模型
        $url=Login::where('openid',$login['openid'])->first();
        $token=Token::setToken(['openid',$login['openid']]);
        if (isset($url)){
            return [
              'code' => 203,
                'msg'=>'用户已存在',
                'data'=>$token
            ];
        }else{
            DB::table('login')->insert($login);
            return [
              'code' =>200,
                'data'=>$token,
                'msg'=>'添加成功'
            ];
        }
    }            

小程序appid和密钥去官网找

https://mp.weixin.qq.com/wxamp/home

在左侧开发里面的开发管理,然后找开发设置,你的appid和密钥就在这里

 

给他一个路由,

//登录授权
Route::post('login',[\App\Http\Controllers\WechatController::class,'login']);

接下来是微信开发者工具里面的代码

login.wxml页面的代码

<button type="primary" bindtap="login" open-type="getUserProfile">授权登录</button>

login.js页面的代码

  login(){
    wx.getUserProfile({
      desc: 'desc',
      success:(res)=>{
        wx.login({
          success: (halp) => {
            console.log(halp)
            let code=halp.code;
            let nickName=res.userInfo.nickName;
            wx.request({
              url: 'http://www.week.com/login',
              method:'post',
              data:{code:code,nickName:nickName},
              success:function(res){
                  wx.navigateTo({
                    url: '/pages/show/show'
                  })
                  console.log(res)
              }
            })
          },
        })
      }
    })
  },

下面是效果图

 

 

 因为我之前登录过,所以这边显示数据已存在,目前小程序完整的授权登录代码就是这些。

posted @ 2023-05-25 20:46  还好阿卡  阅读(170)  评论(0编辑  收藏  举报