微信小程序实现微信登录

文章目录

  • 涉及到的微信官方文档
  • login.wxml
    • 效果
    • login.wxml
  • login.js
    • 效果
    • login.js
    • util.js
  • 后端(使用django)
    • urls.py
    • views.py

流程:
1. wx.getUserProfile() 会调出获取用户微信的页面
2. 当用户点击“允许”后,wx.login() 带着code去后端通过向微信发起请求获取用户的openid,最后登录

涉及到的微信官方文档

https://api.weixin.qq.com/sns/jscode2session
wx.login
wx.getUserProfile
微信小程序查看AppID或重置AppSecret

login.wxml

效果

在这里插入图片描述

login.wxml

在这里插入图片描述

<van-button round slot="button"  size="large"  color="#008800" bind:tap="wechat_login">微信登录</van-button>

login.js

效果

在这里插入图片描述
wx.getUserProfile()会调出获取用户微信的页面

login.js

  wechat_login(){//getUserProfile()-》wx.login获取到该微信用户的openid,之后去数据库中查询是否有该openid的用户,有就该用户登录成功,token赋值,之后跳转首页wx.getUserProfile({desc: '用于微信登录', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写success: (res) => {//用户点击“允许”app.globalData.wechatUserInfo=res.userInfo//去后端获取用户的openid,并与该账号密码绑定,最后登录util.getUserOpenid()}})},

在这里插入图片描述

util.js

function getUserOpenid() {//获取该微信号的openidwx.login({success (res) {if (res.code) {//发起网络请求wx.request({url: 'http://127.0.0.1:8000/api/getWechatId/',method: "GET",data: {code: res.code},success:resquest=>{console.log("request")console.log(resquest.data)if(resquest.data.status==200){app.globalData.userInfo=resquest.data.resultsconsole.log("openid")console.log(app.globalData.userInfo.openid)wx.showToast({title: resquest.data.msg,icon: 'success'})//登录成功,跳转首页wx.switchTab({url: '/pages/index/index',})}else{wx.showToast({title: "登录失败",icon: 'error'})}}})} else {console.log('登录失败!' + res.errMsg)}}})
}

后端(使用django)

urls.py

urlpatterns = [path('api/getWechatId/',WechatView.as_view())
]

views.py

class WechatView(APIView):authentication_classes = [RecordAuthentication, ]	# 权限校验def get(self, request):code = request.query_params.get("code")print("code " + code)url = "https://api.weixin.qq.com/sns/jscode2session"url += "?appid=xxx"  	# 换成自己的appidurl += "&secret=xxx"  	# 换成自己的appSecreturl += "&js_code=" + codeurl += "&grant_type=authorization_code"url += "&connect_redirect=1"import requests, jsonr = requests.get(url)  # 向微信发送请求,获得微信用户的openidkey = json.loads(r.text)  # 转成json格式openid = key.get("openid")  # openid是该用户在该小程序中的唯一标识print("openid " + openid)if not request.user:# 选择微信登录# 根据openid到user表中查出该用户,如果没有,为其创建一个用户user=User.objects.filter(openid=openid).first()token = str(uuid.uuid4())if(user):# 存在该用户user.token=tokenuser.save()user_serializer = UserModelSerializer(user)else:# 没有此用户user.username="momo"user.password="123456"user.openid=openiduser.token = tokenuser.save()user_serializer = UserModelSerializer(user)return Response({'status': '200','msg': '登录成功!','results': user_serializer.data})else:# 登录状态下实现绑定微信userid=request.user.iduser=User.objects.filter(id=userid).first()user.openid=openiduser.save()return Response({'status': '200','msg': '绑定成功!','openid': openid})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/178687.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue实现海康H5视频插件播放视频的实例,实现取流失败了之后重新获取新的流播放视频

vue实现海康H5视频插件播放视频的实例&#xff0c;实现取流失败了之后重新获取新的流播放视频 h5player是一个基于HTML5的流式网络视频播放器&#xff0c;无需安装浏览器插件即可通过websocket协议向媒体服务取流播放多种格式的音视频流。 首先去海康开发平台&#xff0c;把插…

CopyOnWriteArrayList源码解析

CopyOnWriteArrayList源码解析 文章目录 CopyOnWriteArrayList源码解析一、CopyOnWriteArrayList二、总结 一、CopyOnWriteArrayList 在 JUC 中&#xff0c;对于 ArrayList 的线程安全用法&#xff0c;比较推崇于使用 CopyOnWriteArrayList &#xff0c;那么CopyOnWriteArrayL…

【.NET Core】委托(Delegate)应用详解

【.NET Core】委托&#xff08;Delegate&#xff09;应用详解 文章目录 【.NET Core】委托&#xff08;Delegate&#xff09;应用详解一、概述二、委托&#xff08;Delegate&#xff09;定义三、基础委托(Delegate) - 无返回值委托四、基础委托(Delegate) - 有返回值委托五、Mu…

Vue2或者uniapp 中 使用 iframe 嵌入本地 HTML 页面 并 相互通信。

1.使用 iframe 嵌入本地 HTML 页面&#xff08;以pdfjs为例&#xff09; 在 public 文件夹下新建 static 文件夹&#xff0c;然后将 html 文件及相关引用拷贝到 static 文件夹下 uniapp在src下新建hybrid文件 vue 文件完整代码 <template><div class"wrap&q…

java实现简单连点器1

这段代码是使用Java的AWT库来实现模拟鼠标点击的操作。它创建了一个Robot对象&#xff0c;通过该对象可以模拟鼠标和键盘操作。在这段代码中&#xff0c;首先设置了点击位置的坐标&#xff08;x和y&#xff09;&#xff0c;点击间隔时间&#xff08;interval&#xff09;以及点…

顶级数据恢复工具—— 最全的15个数据恢复软件榜单

在这个信息为王的数字时代&#xff0c;关键数据的丢失对个人和企业来说都可能是灾难性的。无论是由于意外删除、硬件故障还是恶意攻击&#xff0c;拥有强大的数据恢复解决方案都是至关重要的。在本综合指南中&#xff0c;我们将探索市场上最好的数据恢复软件&#xff0c;包括顶…

java+python农村集体产权管理系统php+vue

注册、登陆该系统根据操作权限的不同分为管理员和用户两种&#xff0c;新用户在登陆前要进行用户注册&#xff0c;注册完成后方可进行登陆。 本次设计的关键问题处理&#xff0c;主要有如下几点&#xff1a; (1&#xff09;本次开发&#xff0c;采用主流Thinkphp框架进行开发&a…

KernelSHAP vs TreeSHAP

Kernel SHAP和Tree SHAP都用于近似Shapley值。Tree SHAP要快得多。缺点是它只能用于基于树的算法&#xff0c;如随机森林和xgboost。另一方面&#xff0c;Kernel SHAP是模型不可知的(model agnostic)&#xff0c;这意味着它可以与任何机器学习算法一起使用。我们将比较这两种近…

如何把 Oracle 19C RAC+DG加入到ORACLE EM 13C监控

平时见ORACLE 19c rac single dg的部署很多了&#xff0c;ORACLE em 13c 的安装也很多了,但如何把手工部署的oracle 19c rac dg 添加到em 13c 中去&#xff0c;让EM13C 来实现对RACDG的监控&#xff0c;主要是DG的EM13C的监控&#xff0c;还没有看到&#xff0c;大部分都是直接…

AI编译优化技术“loop tiling“、“ordering“、“caching“和“unrolling“

文章目录 概念例子 概念 在计算机科学和编程中&#xff0c;特别是在高性能计算和优化编译器设计领域&#xff0c;“loop tiling”、“ordering”、"caching"和"unrolling"是一些常见的术语&#xff0c;它们涉及到改进程序性能的不同策略。下面分别解释这些…

2023极客大挑战-AGRT战队wp

目录 RE Shiftjmp 点击就送的逆向题 幸运数字 ​编辑 砍树 小黄鸭 flower-or-tea mySelf 是男人就来扎针 听说cpp很难&#xff1f; Easymath 寻找初音未来 Rainbow 浪漫至死不渝 ezandroid Pwn nc_pwntools password ret2text write1 ret2libc ezpwn wr…

力扣23. 合并 K 个升序链表(java,最小堆解法)

Problem: 23. 合并 K 个升序链表 文章目录 题目描述思路解题方法复杂度Code 题目描述 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 思路 1.对于合并k个有序链表&#xff0c;我们较为容易想…

高翔:《自动驾驶与机器人中的SLAM技术 》-Slam_in_autonomous_driving 编译过程中遇到的问题

使用的环境是ubuntu20.04 问题1.安装g2o没有问题&#xff0c;不过在编译整个项目工程时候报错&#xff1a; ”openmp_mutex.h: 30:10: fatal error: g2o/config.h: No such file or directory“: 解决办法&#xff1a; 只需要将/thirdparty/g2o/build/g2o下的config.h放到/…

shiro整合redis

shiro整合redis 前言&#xff1a;shiro默认的session是存储在jvm内存中的&#xff0c;这样会导致java服务内存占用更大以及一旦服务器宕机或者版本迭代需要重启服务时&#xff0c;缓存中的数据不能恢复&#xff0c;导致用户需要重新登录认证&#xff0c;体验很差。因此利用第三…

C++ STL : std::list,源码面前,了无秘密,大裤衩啥颜色材质给你写的明明白白,哈哈

eat std::list source code list的好处是每次插入或删除一个元素&#xff0c;就配置或释放一个元素空间。因此&#xff0c;list对于空间的运用有绝对的精准&#xff0c;一点也不浪费。而且&#xff0c;对于任何位置的插入和元素移除都永远是常数时间。 可惜了当下有点忙能力欠…

c语言练习12周(15~16)

编写int fun(char s[])函数&#xff0c;返回字串中所有数字累加和 题干编写int fun(char s[])函数&#xff0c;返回字串中所有数字累加和。 若传入串"k2h3yy4x"返回整数9&#xff1b;若传入串"uud9a6f7*"返回整数22 //只填写要求的函数 int fun(cha…

JSON详细教程

&#x1f60a;JSON详细教程 &#x1f6a9;JSON简介☃️JSON语法规则&#x1f50a;JSON和JavaScript对象的区别 ☃️JSON数据类型字符串&#x1f50a;数字&#x1f50a;布尔值&#x1f50a;数组&#x1f50a;对象&#x1f50a;Null ☃️JSON对象&#x1f50a;访问JSON对象的值&a…

堆的应用(堆排序、Top-K问题)

文章目录 1 堆排序2 Top-K问题 1 堆排序 堆排序是一种基于二叉堆&#xff08;通常使用数组实现&#xff09;的排序算法。 它的基本思想是利用堆这种数据结构的性质&#xff0c;通过建立一个堆&#xff08;大堆或小堆&#xff09;&#xff0c;使得堆的根节点是所有节点中的最大值…

在线 SQL 模拟器SQL Fiddle使用简介

在线 SQL 模拟器SQL Fiddle使用简介 有时候&#xff0c;我们想去验证 SQL语句&#xff0c;却缺少数据库环境&#xff0c;那该怎么办呢&#xff1f; 这时候在线 SQL 模拟器就有了用武之地。SQL 模拟器免安装&#xff0c;可以在网页直接运行 SQL 。 SQL Fiddle 支持 MySQL、Orac…

C++ Qt QString用法详解与代码演示

作者:令狐掌门 技术交流QQ群:675120140 csdn博客:https://mingshiqiang.blog.csdn.net/ 文章目录 创建和初始化长度和容量修改字符串字符串比较查找和提取数值转换arg格式化`arg` 的基本用法精确控制占位符多占位符的复杂替换使用大括号占位符注意事项迭代Unicode 和编码QSt…