[转]微信小程序登录逻辑梳理

本文转自:http://www.jianshu.com/p/d9996cafdb31

官方文档

文档相关地址:

用户登录 获取用户数据 用户数据的签名验证和加解密

登录时序图.png

微信两个api所拿到的信息:login和getUserInfo

返回的信息.png

注册/登录

小程序端:

通过上面wx.login和wx.getUserInfo两个api拿到相应的信息,并通过上方接口传给自己的服务器. 需要传输的信息有7个参数:

appid  小程序唯一标识
secret  小程序的 app secret
js_code //wx.login登录时获取的 code,用于后续获取session_key //下面两个参数用户服务器端签名校验用户信息的 signature 使用 sha1( rawData + sessionkey ) 得到字符串,用于校验用户信息。 rawData 不包括敏感信息的原始数据字符串,用于计算签名。 //下面两个参数是用于解密获取openId和UnionId的 encryptedData 包括敏感数据在内的完整用户信息的加密数据 iv 加密算法的初始向量

当然,可以精简为以下三个参数. 其余的签名校验的参数可省略,而appid和secret可以直接写在服务器.

js_code //  wx.login登录时获取的 code,用于后续获取session_key
encryptedData  包括敏感数据在内的完整用户信息的加密数据
iv 加密算法的初始向量

服务端处理逻辑

相关的信息传输给服务器后,服务器

1.先根据js_code去微信服务器拿到session_key 2.(此步可省略)使用 sha1( rawData + sessionkey )拿到字符串,判断与signature值是否相同,如果相同则用户信息无误,可进行下一步.如果不同,则说明用户信息被篡改或过期. 3.然后根据解密算法自行解密(输入参数为appId,sessionKey,encryptedData,iv,返回一个jsonObj),拿到openId和unionId等信息,执行服务器端的注册/登录操作. 4.注册/登录操作逻辑完成后,将我们服务器的sessionId(或其他token),以及用户信息返回给客户端.

其中,服务器去获取session_key的请求为:

(小写为固定写好的,大写为待替换的) https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

返回:

    //正常返回的JSON数据包{"openid": "OPENID","session_key": "SESSIONKEY" "expires_in": 2592000 } //错误时返回JSON数据包(示例为Code无效) { "errcode": 40029, "errmsg": "invalid code" }

相关解密算法:

https://mp.weixin.qq.com/debug/wxadoc/dev/api/signature.html

注意:示例代码中有node,c++,php,python的,没有java的.

需要服务器返回的信息:

sessionId/token 登录状态标识
userInfo: jsonObject,用户在我们平台上的信息,其内容与getPersonalInfo接口返回的相同.

最后,将登录操作封装成方法,需要处调用即可

//最终供外面调用的方法
function login(){ console.log('logining..........'); //调用登录接口 wx.login({ success: function (e) { console.log('wxlogin successd........'); var code = e.code; wx.getUserInfo({ success: function (res) { console.log('wxgetUserInfo successd........'); var encryptedData = encodeURIComponent(res.encryptedData); thirdLogin(code,encryptedData,res.iv);//调用服务器api } }) } }); } function thirdLogin(code,encryptedData,iv){ var url = "eeee/xxx/login/ttttt"; var params = new Object(); params.code = code; params.encryptedData = encryptedData; params.iv =iv; buildRequest(new Object(),url,params,{ onPre: function(page){}, onSuccess:function (data){ console.log('my login successd........'); console.log(data); getApp().globalData.session_id = data.session_id; getApp().globalData.uid = data.uid; getApp().globalData.isLogin = true; }, onError : function(msgCanShow,code,hiddenMsg){ } }).send(); }

        

微信小程序

 

转载于:https://www.cnblogs.com/freeliver54/p/6529564.html

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

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

相关文章

转一篇写的比较好的camera文档[Camera 图像处理原理分析]

色彩篇(一) 1 前言 做为拍照手机的核心模块之一,camera sensor效果的调整,涉及到众多的参数,如果对基本的光学原理及sensor软/硬件对图像处理的原理能有深入的理解和把握的话,对我们的工作将会起…

201521123061 《Java程序设计》第三周学习总结

1. 本章学习总结 2. 书面作业 **Q1.代码阅读 public class Test1 { private int i 1;//这行不能修改 private static int j 2; public static void main(String[] args) {geti();Test1getj(); }public static void geti() {System.out.println(i); }public static void getj(…

自带flash的浏览器_解决Flash插件已被屏蔽的问题(谷歌、火狐、IE、Edge)

病症,浏览器界面中显示 adobe flash player 已被屏蔽:作为产品运营,作为经常必须可能要接触到Flash/Html5视频应用的人来员;作为曾开发过flash产品的我来说,这题,我会。并且,提供三种解决方式。…

numpy数组中冒号[:,:,0]与[...,0]的区别

先随机产生一个[3,4,5]的numpy数组。则该x维度是3,shape是(3,4,5),总共包含60个元素。 x[:,:,0] 意思是对数组x切片,可以想象成一个正方体数据,每次切下一个面的数据。第二维取0则得出来[3,4]大小的数组&am…

苹果忘记开机密码_苹果电脑忘记开机密码快速恢复的方法!

很多用户不经常使用电脑,或者粗心大意忘记自己设置的电脑开机密码!!!这可怎么办呢?今天小编就来和大家分享【Mac电脑忘记开机密码快速恢复的方法教程!】有需要的的用户不要错过哦!步骤一&#x…

Web框架 Bottle 、Flask 、Tornado

Bottle Flask Tornado Python的WEB框架 Bottle Bottle是一个快速、简洁、轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块。 pip install bottle easy_install bottle apt-get install py…

【Pytorch神经网络理论篇】 36 NLP中常见的任务+BERT模型+发展阶段+数据集

同学你好!本文章于2021年末编写,获得广泛的好评! 故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现, Pytorch深度学习理论篇(2023版)目录地址…

win7关机快捷键_1个U盘+1款软件,电脑小白也能在家轻松重装win7系统

U盘重装系统,顾名思义就是将U盘插入笔记本后,对电脑进行重装系统。但是我们得清楚一个事情,所谓的U盘并不是普通的U盘,是一个装有PE镜像文件的启动盘。也许很多人还不懂,今天我就来给大家介绍一下如何用1个U盘1款软件&…

cmd导入mysql文件

之所以要使用CMD(命令行)导入Mysql文件(.sql文件形式)也许是你还没遇到过 Mysql图形管理工具都无法正常导入sql文件。在网上找了很多的网友提供的资料来看几乎都是显示 所用工具限制,这里我就不多说了。 如下&#xff…

【Pytorch神经网络实战案例】30 jieba库分词+训练中文词向量

1 安装jieba 1.1 安装 pip install jieba 1.2 测试 import jieba seg_list jieba.cut("谭家和谭家和") for i in seg_list:printf(i); 1.3 词向量 在NLP中,一般都会将该任务中涉及的词训练成词向量,然后让每个词以词向量的形式型的输入…

javascript option 菜单图标_苹果电脑上神奇的Option键 巧用option键提升效率

Option键 是苹果电脑一个非常有用的键option键主要的用途,是绕过一些你不想要的对话框。巧用option键可以提升效率,喜欢的朋友收藏起来吧!Option键神奇功能拖拽粘贴Mac电脑上拖拽文件默认是剪切功能按住Option键拖拽文件就能快速达到复制粘贴…

核酸结果统计难?130行代码实现基于ocr的核酸截图识别存储Excel(复现代码核查核酸报告)

来源: 核酸结果统计难?复旦博士生的操作火了https://m.gmw.cn/baijia/2022-04/08/35644611.html 1 程序背景 学校要收核酸截图,汇总太麻烦了,故将OCR整合到数据中。 1.1 命名规范 20200250202003曹文举4.12阴性.jpg 1.2 Eas…

ubuntu下面的git服务器搭建

1、安装相应的软件和依赖 ubuntu:~$ sudo apt-get install git-core openssh-server openssh-client git-core是git版本控制核心软件安装openssh-server和openssh-client是由于git需要通过ssh协议来在服务器与客户端之间传输文件然后中间有个确认操作,输…

实验四:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

王康 原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 系统调用:操作系统中,程序员通过封装好的库函数来实现系统调用 前提 1,用户态内核态中断: 1,用户态内核…

【Pytorch神经网络理论篇】 37 常用文本处理工具:spaCy库+torchtext库

同学你好!本文章于2021年末编写,获得广泛的好评! 故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现, Pytorch深度学习理论篇(2023版)目录地址…

海龟画图 python太阳花_python 简单的绘图工具turtle使用详解

目录 1. 画布(canvas) 1.1 设置画布大小 2. 画笔 2.1 画笔的状态 2.2 画笔的属性 2.3 绘图命令 3. 命令详解 4. 绘图举例 4.1 太阳花 4.2 绘制小蟒蛇 4.3 绘制五角星 python2.6版本中后引入的一个简单的绘图工具,叫做海龟绘图(Turtle Graphics),turtle库是python的内…

【Pytorch神经网络实战案例】31 TextCNN模型分析IMDB数据集评论的积极与消极

卷积神经网络不仅在图像视觉领域有很好的效果,而且在基于文本的NLP领域也有很好的效果。TextCN如模型是卷积神经网络用于文本处理方面的一个模型。 在TextCNN模型中,通过多分支卷积技术实现对文本的分类功能。 1 TextCNN 1.1 TextCNN模型结构 TexCNN…

python怎么画出好看的统计图_用最简单的 Python ,画最好看的图 [简单数据可视化]...

可以直接修改参数使用,非常的方便。import numpy as np import pandas as pd import holoviews as hv hv.extension(bokeh) macro_df pd.read_csv(http://assets.holoviews.org/macro.csv, \t) key_dimensions [(year, Year), (country, Country)] value_dimensio…

combobox之下拉宽度自适应

效果对比 先看下优化前后的效果,再看实现过程. 优化前 优化后 从上图中可看到,combobox优化后可以自适应不同长度的字符串,保证每个字符串都能够显示完整。 实现过程 当我们触发CBN_DROPDOWN事件时,不再使用默认的实现&#xff0c…

Python工具:将文件夹下的视频按照帧数输出图片文件(含代码)

1、描述 将一个视频流按帧数截取大量的图片 2、用途 AI的数据集制作,得到大量的图片,之后将其打标签 3、案例文件截图 4、代码实现: import cv2 import argparse import os# 边里该文件夹下的文件名称 def read_directory(directory_nam…