首页 > 编程语言 >微信小程序授权登录

微信小程序授权登录

时间:2023-05-25 20:57:14浏览次数:51  
标签:code 登录 微信 token key res 授权 login nickName

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

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

JSON Web Token Libraries - jwt.io

在app下面创建一个server目录

接着新建一个Token类

下面是封装Token的代码

<?php

namespace App\server;
use Firebase\JWT\JWK;
use Firebase\JWT\JWT;

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=JWK::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)
              }
            })
          },
        })
      }
    })
  },

下面是效果图

 

 

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

标签:code,登录,微信,token,key,res,授权,login,nickName
From: https://www.cnblogs.com/Boboschen/p/17432895.html

相关文章

  • Linux首次登录入与寻求帮助(Linux的简单使用)
    Linux首次登录入与寻求帮助一些Linux中使用的常用命令与技巧:进入终端系统方式(纯文本环境):按ctrl+alt+F2会进入tty2,同理F3~F7均可分别进入tty3~tty7,只有tty1是图形化界面(如果已经安装了图形界面了),在文本环境中按ctrl+alt+F1会进入图形化界面在文本模式注销......
  • 微信小程序点击按钮进行页面跳转
    下面是wxml代码<buttontype="primary"bindtap="go">跳转到list页面</button>下面是js代码go:function(){wx.navigateTo({url:'/pages/list/list',})},......
  • C#-微信平台SDK有哪些?
    1、Senparc.Weixin(WeixinMPSDK):  盛派C#微信SDK,开源;提供了微信公众平台(订阅号+服务号+小程序+小游戏+小商店+视频号)、企业微信、小程序、微信支付等多个平台的API封装,支持.NETFramework和.NETCore。2、SKIT.FlurlHttpClient.Wechat(SKIT):  封装全部已知的微信API,包......
  • linux命令全部失效+无法登录 极限操作
    背景在kali上大概用了有两个月,这两个月可以说喜忧参半喜:kali系统优化的很好,不管是开机关机还是运行应用程序,都非常快,非常流畅,配合占用超小的xcfe桌面,爽飞忧:由于我是直接安装在物理机上的,原本是打算做开发和逆向用,但这个系统做开发和逆向,bug实在是太多,而且缺少很多必要的so文件(......
  • 微信小程序+百度获取用户当前所在位置
    微信小程序通过 wx.getLocation获取所在的gps坐标在通过百度线上转换代码转成文字版地址百度控制台->应用管理->我的应用 https://api.map.baidu.com/reverse_geocoding/v3/?ak=你的keyG&output=json&coordtype=wgs84ll&location=${latitude},${longitude}别忘了去小程......
  • 宝塔面板登录 phpMyAdmin 提示服务器和客户端上指示的HTTPS之间不匹配
    宝塔面板登录phpMyAdmin提示服务器和客户端上指示的HTTPS之间不匹配https://www.niuqi360.com/btpanel/mismatch-between-https-indicated-on-server-and-client/......
  • “提高微信小程序曝光率的关键策略”,让你的小程序被更多人发现!
    很高兴听到您关注微信小程序的曝光率策略。以下是一些关键策略,可以帮助提高小程序的曝光率:优化小程序SEO首先要建立一个专业、系统的SEO策略,包括小程序标题、关键词、描述等,这些关键部分可以让搜索引擎更好的了解小程序的优势和特点,同时为搜索用户提供更好的搜索结果。注重用户体验......
  • drf之登录功能,认证组件,权限组件,频率组件
    目录一、登录功能表模型视图类回顾路由二、认证组件认证组件使用步骤(固定用法)三、权限组件权限类的使用步骤四、频率组件频率类的使用步骤一、登录功能表模型classUserInfo(models.Model):name=models.CharField(max_length=32)password=models.CharField(max_......
  • django配置文件作用,drf 登录功能,drf认证组件,drf权限组件,drf频率组件
    django配置文件作用:    drf登录功能:view内:from.modelsimportUserInfo,UserTokenfromrest_framework.viewsetsimportViewSetimportuuidfromrest_framework.responseimportResponsefromrest_framework.decoratorsimportactionclassUser......
  • 园子的现代化建设-社群运营:欢迎加入园子的细分社群微信群
    之前园子在运营上无所作为,现在我们要努力做出改变。为了方便大家与同道中(同一个技术领域)的园友进行交流,我们开始尝试运营一些细分社群,目前初步选择了以下几个技术领域创建了微信群:博客园AI社群博客园.NET社群博客园Java社群博客园Go社群博客园Python社群博客园Web前端社群......