Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >微信小程序登入流程

微信小程序登入流程

作者头像
小小咸鱼YwY
发布于 2020-06-19 08:05:54
发布于 2020-06-19 08:05:54
2.4K00
代码可运行
举报
文章被收录于专栏:python-爬虫python-爬虫
运行总次数:0
代码可运行

微信小程序登入流程

一.首先前端先传code去后端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wx.login({
      success(res) {
        if (res.code) {
          //发起网络请求
          wx.request({
            url: app.globalData.host+'login',
            method:"post",
            data: {
              code: res.code
            }
          })
        } else {
          console.log('登录失败!' + res.errMsg)
        }
      }
    })

二.后端接受到请求中的code

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#.......省略一下配置路由啥的
class Login(APIView):
    def post(self,request):
        code = request.data.get('code')
        print(code,type(code))
        #061HMtlG0hAQ6d2hOYkG0DlhlG0HMtlh <class 'str'>

三.后端获得code之后向微信官方发起请求获得相关参数

发起的链接

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

请求参数

属性

类型

默认值

必填

说明

appid

string

小程序 appId

secret

string

小程序 appSecret

js_code

string

登录时获取的 code

grant_type

string

授权类型,此处只需填写 authorization_code

返回值

Object

返回的 JSON 数据包

属性

类型

说明

openid

string

用户唯一标识

session_key

string

会话密钥

unionid

string

用户在开放平台的唯一标识符,在满足 UnionID 下发条件的情况下会返回,详见 UnionID 机制说明。

errcode

number

错误码

errmsg

string

错误信息

errcode 的合法值

说明

最低版本

-1

系统繁忙,此时请开发者稍候再试

0

请求成功

40029

code 无效

45011

频率限制,每个用户每分钟100次

接着上述我们对于路径进行拼接成他需要的内容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import requests
class Login(APIView):
    def post(self,request):
        code = request.data.get('code')
    #https: // api.weixin.qq.com / sns / jscode2session?appid = {} & secret ={} & js_code = {} & grant_type = authorization_code
        url= f"https://api.weixin.qq.com/sns/jscode2session?appid=xxxx&secret=xxxx&js_code={code}&grant_type=authorization_code"
        #appid与secret不同的开发者不一样
        reponse=requests.get(url)
        #因为返回值是json的形式
        data=reponse.json()
        print(data)

appid看你小程序中设置了是哪个appid

对于的appid有对应的secret

其中appid以及secret均在你小程序账号中

四.获取参数后后台对于参数进行加密处理

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import hashlib
class Login(APIView):
    ........
    if data.get("openid") and data.get("session_key"):
        md5 = hashlib.md5()
        md5.update(data['openid'].encode("utf-8"))
        md5.update(data['session_key'].encode("utf-8"))
        key = md5.hexdigest()
        val =data['session_key']+"&"+data['openid']
        print(key,val)

五.如果上述过程都成功,返回前端一个标识方便后续操作

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from rest_framework.response import  Response
from django.core.cache import cache

class Login(APIView):
    ........
    cache.set(key,val)  #存缓存中较少对于数据库的压力
    has_user=models.Wxuser.objects.filter(openid=data['openid']).first() #将唯一标识进行存储
    if not  has_user:
        models.Wxuser.objects.create(openid=data['openid'])
        return Response({
            "code": 200,
            "msg": "ok",
            "data":{'login_key':key}  #发送login_key其目的是为了后续可以直接去缓存取对于信息
        })

六.前端在前没有任何问题的情况下对于标识信息进行接收

目的,标识已登入以及获取标识,方便后续对于用户信息的查找

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 var that = this
    wx.login({
      success(res) {
        if (res.code) {
          //发起网络请求
          wx.request({
            url: app.globalData.host + 'login',
            method: "post",
            data: {
              code: res.code
            },
            success(res) {
              console.log(res.data.data.login_key)
              console.log(that)
              that.setData({
                login_key: res.data.data.login_key
              }
              )
            },
          })
        }else {
          console.log('登录失败!' + res.errMsg)
        }
      }
    })

其中setData方法的必须对象是整个页面

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-09-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
《Elasticsearch 源码解析与优化实战》第11章:gateway 模块分析
上述信息被持久化到磁盘,需要注意的是:持久化的 state 不包括某个分片存在于哪个节点这种内容路由信息,集群完全重启时,依靠gateway的recovery过程重建RoutingTable。 当读取某个文档时,根据路由算法确定目的分片后,从RoutingTable中查找分片位于哪个节点,然后将请求转发到目的节点。
HLee
2021/05/31
1.2K0
《Elasticsearch 源码解析与优化实战》第11章:gateway 模块分析
《Elasticsearch 源码解析与优化实战》第13章:Snapshot 模块分析
快照模块是ES备份、迁移数据的重要手段。它支持增量备份,支持多种类型的仓库存储。本章我们先来看看如何使用快照,以及它的一些细节特性,然后分析创建、删除及取消快照的实现原理。
HLee
2021/06/17
1.8K1
《Elasticsearch 源码解析与优化实战》第13章:Snapshot 模块分析
【腾讯云ES】Elasticsearch 分布式架构剖析及扩展性优化
Elasticsearch 是一个实时的分布式搜索分析引擎,简称 ES。一个集群由多个节点组成,节点的角色可以根据用户的使用场景自由配置,集群可以以节点为单位自由扩缩容,数据以索引、分片的形式散列在各个节点上。本文介绍 ES 分布式架构基础原理,剖析分布式元数据管理模型,并介绍腾讯云 ES 在分布式扩展性层面相关的优化,解析代码基于 8.5 版本。
黄华
2022/11/18
3.8K1
【腾讯云ES】Elasticsearch 分布式架构剖析及扩展性优化
《Elasticsearch 源码解析与优化实战》第12章:allocation模型分析
本文主要分析allocation 模块的结构和原理,然后以集群启动过程为例分析 allocation 模块的工作过程
HLee
2021/05/27
1.1K1
《Elasticsearch 源码解析与优化实战》第12章:allocation模型分析
Elasticsearch 源码探究 001——故障探测和恢复机制
探究Elasticsearch7.10.2 节点之间的故障探测以及熔断故障是怎么做的,思考生产上的最佳实践。
铭毅天下
2023/08/18
6240
Elasticsearch 源码探究 001——故障探测和恢复机制
Elasticsearch源码分析七之集群选举流程分析
org.elasticsearch.node.Node#start方法中有ZenDiscovery初始化的部分:
山行AI
2020/03/12
1.2K0
《Elasticsearch 源码解析与优化实战》第8章:GET流程
ES的读取分为Get和Search两种操作,这两种读取操作有较大的差异,GET/MGET必须指定三元组:index、_type、_id。 也就是说,根据文档id从正排索引中获取内容。而Search不指定_id,根据关键词从倒排索引中获取内容。本章分析GET/MGET过程,下一章分析Search过程。
HLee
2021/06/11
9740
《Elasticsearch 源码解析与优化实战》第8章:GET流程
聊聊elasticsearch的MembershipAction
elasticsearch-6.7.1/server/src/main/java/org/elasticsearch/discovery/zen/MembershipAction.java
code4it
2019/04/25
7730
聊聊elasticsearch的MembershipAction
《Elasticsearch 源码解析与优化实战》第7章:写流程
本章分析ES写入单个和批量文档写请求的处理流程,仅限于ES内部实现,并不涉及Lucene内部处理。在ES中,写入单个文档的请求称为Index请求,批量写入的请求称为Bulk请求。写单个和多个文档使用相同的处理逻辑,请求被统一封装为BulkRequest。
HLee
2021/05/25
2.4K0
《Elasticsearch 源码解析与优化实战》第7章:写流程
《Elasticsearch 源码解析与优化实战》第16章:ThreadPool模块分析
每个节点都会创建一系列的线程池来执行任务,许多线程池都有与其相关任务队列,用来允许挂起请求,而不是丢弃它。下面列出目前ES版本中的线程池。
HLee
2021/08/16
2.1K0
《Elasticsearch 源码解析与优化实战》第16章:ThreadPool模块分析
Elasticsearch源码分析二之Node节点创建与启动流程分析
紧接着昨天的Bootstrap的初始化来进行开篇,对应的是org.elasticsearch.bootstrap.Bootstrap#setup方法,详见代码片段:
山行AI
2020/03/11
1.1K0
Elasitcsearch底层系列之 Node启动过程源码解析
Elasticsearch 是一款开源的分布式搜索引擎,提供了近实时的查询能力和强大的聚合分析能力。与Elastic官方提供的其他组件(Beats、Logstash、Kibana)组合成Elastic Stack,提供了多种使用场景下数据摄入、清洗、存储、查询、可视化的完整解决方案,在搜索、日志分析、统计分析等领域有广泛应用。
morningchen
2018/12/29
2.6K0
Elasitcsearch底层系列之 Node启动过程源码解析
《Elasticsearch 源码解析与优化实战》第9章:Search流程
GET操作只能对单个文档进行处理,由_ index、_type 和id 三元组来确定唯一文档。 但搜索需要一种更复杂的模型,因为不知道查询会命中哪些文档。
HLee
2021/06/15
4.9K0
《Elasticsearch 源码解析与优化实战》第9章:Search流程
《Elasticsearch 源码解析与优化实战》第5章:选主流程
Discovery模块负责发现集群中的节点,以及选择主节点。ES支持多种不同Discovery类型选择,内置的实现称为Zen Discovery,其他的包括公有云平台亚马逊的EC2、谷歌的GCE等。
HLee
2021/06/07
1.4K2
《Elasticsearch 源码解析与优化实战》第5章:选主流程
Elasticsearch快照(snapshot)备份原理及分析
Snapshot是Elasticsearch提供的一种将集群数据备份至远程存储库的功能。例如将数据备份至S3,HDFS,共享文件系统等。
空洞的盒子
2024/08/02
2K3
《Elasticsearch 源码解析与优化实战》第4章:节点启动和关闭
本章分析单个节点的启动和关闭流程。看看进程是如何解析配置、检查环境、初始化内部模块的,以及在节点被“kill”的时候是如何处理的。
HLee
2021/06/03
1.2K0
《Elasticsearch 源码解析与优化实战》第4章:节点启动和关闭
《Elasticsearch 源码解析与优化实战》第10章:索引恢复流程分析
索引恢复(index.recovery)是ES数据恢复过程。待恢复的数据是客户端写入成功,但未执行刷盘(flush)的Lucene分段。例如,当节点异常重启时,写入磁盘的数据先到文件系统的缓冲,未必来得及刷盘,如果不通过某种方式将未刷盘的数据找回来,则会丢失一些数据,这是保持数据完整性的体现;另一方面,由于写入操作在多个分片副本上没有来得及全部执行,副分片需要同步成和主分片完全一致,这是数据副本一致性的体现。
HLee
2021/05/27
2.4K0
《Elasticsearch 源码解析与优化实战》第10章:索引恢复流程分析
ElasticSearch详解——3.ES索引的创建过程详解
上一篇文章ElasticSearch详解——2.阅读源码详解ES启动过程跟着代码,详细说明了ES的启动过程。这一篇文章主要详细说明ES比较关键的问题:ES中的索引是如何创建的。
开发者日常叨叨
2024/12/26
4930
看elasticsearch二阶段提交(2PC)
二阶段提交二阶段提交(Two-phase Commit),使分布式架构下所有节点保持事务一致性的算法(Algorithm)。假设2个角色:协调者(Coordinator),参与者(Cohorts)。两者之间可以进行rpc。undo/redo:所有节点都预写式日志,且日志持久化在可靠的存储设备上。节点可靠:所有节点不会永久性损坏,即使损坏后仍然可以恢复。过程;第一阶段投票阶段,各参与者投票是否要继续接下来的提交操作;第二阶段完成阶段,因为无论结果怎样,协调者都必须在此阶段结束当前事务。图片堆栈图片代码分析Pr
用户1233856
2022/08/07
4940
Elasticsearch源码分析-写入解析
Elasticsearch(ES)是一个基于Lucene的近实时分布式存储及搜索分析系统,其应用场景广泛,可应用于日志分析、全文检索、结构化数据分析等多种场景,既可作为NoSQL数据库,也可作为搜索引擎。由于ES具备如此强悍的能力,因此吸引了很多公司争相使用,如维基百科、GitHub、Stack Overflow等。
技术姐
2018/11/07
6K0
推荐阅读
相关推荐
《Elasticsearch 源码解析与优化实战》第11章:gateway 模块分析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验