微信小程序 获取用户信息并保存登录状态

微信小程序实战之获取用户信息并保存唯一实例 整理了75个JS高频面试题,并给出了答案和解析,基本上可以保证你能应付面试官关于JS的提问。 阅读详情

一、登录态维护

官方的文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html#wxloginobject

通过 wx.login() 获取到用户登录态之后,需要维护登录态。开发者要注意不应该直接把 session_key、openid 等字段作为用户的标识或者 session 的标识,而应该自己派发一个 session 登录态(请参考登录时序图)。对于开发者自己生成的 session,应该保证其安全性且不应该设置较长的过期时间。session 派发到小程序客户端之后,可将其存储在 storage ,用于后续通信使用。

登录时序图

在这里插入图片描述
从上图可以看出。当我们通过wx.login()获取code的后,发送给我们的服务器,然后去请求微信服务器换取得到对应的openid与session_key,openid是该用户在小程序中的唯一标识用于模板通知之类的。session_key就是用来解密用户的敏感信息。unionid之类的。unionid是微信用户在所有微信平台下的唯一标识。下面我会讲解一下如何得到

在这里插入图片描述

以上就是我的实现方法。调用wx.login()得到code后请求服务器获取openid与session_key缓存在服务器当中。其中生成一个随机数为key,value为openid与session_key。然后返回到小程序通过wx.setStorageSync(‘LoginSessionKey’,得到的随机数key)缓存在小程序当中。每当我们去请求服务器时带上LoginSessionKey即可给服务器读取从而判断用户是否在登录。是不是很简单呢?

二、用户数据的加解密

通过wx.login()登录之后。我们可以通过wx.getUserInfo()获取用户信息。其中一些不敏感的信息在返回的 result中的userInfo里。如想要获取敏感信息。openid,unionid之类的。则需要从密文中去解密得到。

而密文则在encryptedData这个字段当中。我们去请求我们服务器去解密然后得到敏感信息后则可以保存起来。

加密数据解密算法

接口如果涉及敏感数据(如wx.getUserInfo当中的 openId 和unionId ),接口的明文内容将不包含这些敏感数据。开发者如需要获取敏感数据,需要对接口返回的加密数据( encryptedData )进行对称解密。 解密算法如下:

  1. 对称解密使用的算法为 AES-128-CBC,数据采用PKCS#7填充。
  2. 对称解密的目标密文为 Base64_Decode(encryptedData),
  3. 对称解密秘钥 aeskey = Base64_Decode(session_key), aeskey 是16字节
  4. 对称解密算法初始向量 iv 会在数据接口中返回。

转载于 https://blog.youkuaiyun.com/yelin042/article/details/71773636/

瞎写的

getUserInfo: function (e) {
     wx.getSetting({
      success(res) {
          let that = this;
          wx.login({
            success(res) {
              console.log(res);
              if (res.code) {             
                    wx.request({
                      // url: 'https://xcx.yaojiesong.com/SK_B2BAPI/JieKou/User/CX_UserLogin.ashx', 
                      url: 'http://47.105.206.10:8074/JieKou/User/CX_UserLogin.ashx',
                      data: {
                        code: res.code,
                      },
                      success(request) {
                        console.log('授权aaaa', request);
                        console.log('授权aaaa', request.data.Message);
                        if (request.data.Message === '授权成功') {
                          // resolve(request.data)
                          if (request.data.Source.unionid == null) {
                            console.log('授权我错了');
                            wx.setStorageSync('unionid', '');
                          } else {
                            wx.setStorageSync('unionid', request.data.Source.unionid);
                          }
                          wx.setStorageSync('openid', request.data.Source.openid);
                          wx.setStorageSync('session_key', request.data.Source.session_key);
                          console.log('unionid', wx.getStorageSync('unionid'));
                          console.log('session_key', wx.getStorageSync('session_key'));                         
                          console.log('openid', wx.getStorageSync('openid'));
                          wx.getUserInfo({//getUserInfo流程
                            success: function (res2) {//获取userinfo成功
                              console.log('wx.getUserInfo', res2);
                              console.log('avatarurl', res2.userInfo.avatarUrl);
                              console.log('nickName', res2.userInfo.nickName);
                              // var encryptedData = encodeURIComponent(res2.encryptedData);//一定要把加密串转成URI编码
                              var encryptedData = res2.encryptedData;//一定要把加密串转成URI编码
                              var iv = res2.iv;
                              console.log('aaaaaaaaaaaa',iv, wx.getStorageSync('unionid'), wx.getStorageSync('openid'), res2.userInfo.nickName, res2.userInfo.avatarUrl, wx.getStorageSync('session_key'));
                          wx.request({
                            // url: 'https://xcx.yaojiesong.com/SK_B2BAPI/JieKou/User/CX_UserAdd.ashx', 
                            url: 'http://47.105.206.10:8074/JieKou/User/CX_UserAdd.ashx',
                            data: {
                              iv: iv,
                              encryptedData: encryptedData,
                             unionid: wx.getStorageSync('unionid'),
                              opendid: wx.getStorageSync('openid'),
                              nickname: res2.userInfo.nickName,
                              imgurl: res2.userInfo.avatarUrl,
                              session_key: wx.getStorageSync('session_key')
                            },
                            success(request) {
                              console.log('授权aaaab', request);
                              wx.setStorageSync('Birthday', request.data.Source[0].Birthday);
                              wx.setStorageSync('CX_OpendId', request.data.Source[0].CX_OpendId);
                              wx.setStorageSync('CardNumber', request.data.Source[0].CardNumber);
                              wx.setStorageSync('ImgUrl', request.data.Source[0].ImgUrl);
                              wx.setStorageSync('Integral', request.data.Source[0].Integral);
                              wx.setStorageSync('Name', request.data.Source[0].Name);
                              wx.setStorageSync('Phone', request.data.Source[0].Phone);
                              wx.setStorageSync('Sex', request.data.Source[0].Sex);
                              wx.setStorageSync('userid', request.data.Source[0].UserId);
                              app.globalData.userid = request.data.Source[0].UserId
                              wx.setStorageSync('WeixinName', request.data.Source[0].WeixinName);

                              that.setData({
                                showbologinshouquan: true,

                                showlogin: true
                              })
                            }
                          })
                            }
                            })
                        } else {
                          // reject(request.data)
                          wx.showToast({
                            title: request.data.Message,
                            icon: 'none',
                            duration: 1000
                          })
                        }
                      },
                    })
                console.log(res.code, 'code')
                //发起网络请求
                console.log('登陆成功' + res)
              } else {
                wx.showToast({
                  title: '登录失败!',
                  icon: 'none',
                  duration: 1000
                })
              }
            }
          });
      }
     })
  },
unniapp微信小程序的登录流程? uniApp微信小程序的登录流程 先使用uni.getSetting来判断用户是否曾经授权过,获取到res.authSetting[‘scope.userInfo’],来判断是否有进行过授权操作,授权过为true,未授权为false //获取用户授权结果(是否允许授权) async checkWxAuth({ state, dispatch }): Promise<{ auth: boolean }> { return await new Promise((resol 阅读详情

相关推荐

微信小程序开发中的用户授权和登录功能

用户授权是获取用户信息的前提,登录功能则是用户的登录凭证的获取和会话管理。通过合理的安排和管理用户的登录态,可以使小程序具备更多的功能和个性化体验。用户授权和登录功能是微信小程序开发中非常重要的一部分,它允许小程序获取用户的基本信息和权限,并实现用户的登录与会话管理。在本文中,我们将详细介绍微信小程序开发中的用户授权和登录功能的实现。需要注意的是,登录接口需要后端开发者提供,我们在请求中传递code参数给后端服务器,后端服务器通过调用微信提供的接口来获取openid,并生成用户的会话信息。

m0_75244442的博客 351

微信小程序用户登录和登录态维护

让用户登录,标识用户和获取用户信息,以用户为核心提供服务,是大部分小程序都会做的事情。我们今天就来了解下在小程序中,如何做用户登录,以及如何去维护这个登录后的会话(Session)状态。 在微信小程序中,我们大致会涉及到以下三类登录方式: 自有的账号注册和登录; 使用其他第三方平台账号登录; 使用微信账号登录(即直接使用当前已登录的微信账号来作为小程序的用户进行登录)。 第一和第二种...

测试喵~ 3万+

微信小程序开发:实现微信登录功能

wx.login({ success: function (res) { if (res.code) { // 发起网络请求 wx.request({ url: 'https://example.com/onLogin', data: { code: res.code }, success: function (res) { wx.setStorageSync('token', res.data.token);最后,将用户的openid作为用户的唯一标识,保存在小程序的本地缓存中,供其他页面使用。

吃不胖. 1203

微信小程序-保持登录(wx.checkSession)

正如浏览器使用cookie功能一样,在微信小程序中,也需要保持用户的登录状态。由于小程序本身没有cookie,则使用自身的storage来储存用户的session ID信息。 使用的逻辑和cookie一样:当用户每次向服务器发送请求时,都带上这个session参数,由于小程序和服务器都存有相同的session,用户就保持了登录状态,直到服务器发现session过期,并要求用户重新登录。 我们可以类比这样一种场景。一个客户第一次走进一座写字楼,前台帮助他办理了门禁卡,并设置了门禁卡的有效期限。当客户之后再次进

onesway2018的博客 5314

软考高级,信息系统项目管理师(高项)经验分享

软考高级,信息系统项目管理师(高项)经验分享 2020-12-21信息系统项目管理师(俗称高项)成绩出来了54,55,47,终于成为高级工程师了。 本文以编写整体管理论文的格式进行,将分为项目启动、项目计划、项目执行、项目检查、项目收尾5个过程回顾高项的考试历程,希望对其他同学有借鉴意义。个人觉得可能对于一次考不过的人参考价值比较大。 第一阶段、项目启动阶段Start——决定考哪个科目。 如图,高级资格的类型有:信息系统项目管理师、系统分析师、系统架构设计师、......

zcheva的专栏 5万+

ctx->cvdl->cuvidGetDecoderCaps(&ctx->caps8) failed -> CUDA_ERROR_DEINITIALIZED: driver shutting down

ffplay -vcodec h264_cuvid sample_720p-2.h264 [quantum6@freeswitch freeswitch]$ ffplay -vcodec h264_cuvid sample_720p-2.h264 ffplay version 4.3.1 Copyright (c) 2003-2020 the FFmpeg developers built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-44) .

柳鲲鹏 2404

微信小程序保持登录状态(使用缓存)

一般来说,一个app在第一次进入时需要进行注册和登录的操作,之后再打开无需再登录即可直接进入app,即保持登录状态。此处使用微信小程序的数据缓存来做到登陆状态的保持。

m0_49558200的博客 1万+

Full Range && Limit Range

Full Range && Limit Range1 Full range和Limit Range定义2 为什么会需要Limit Range3 用Full range去显示limit Range图片4 YUV转RGB5 额外 1 Full range和Limit Range定义 我们知道,对于RGB和YUV的色彩空间来说,有个位深(bit-depth)的概念;位深是指记录图像每个像素的色彩通道时所使用的bit数,常见的RGB888,YUV420-8bit。以RGB888为例,其代表R G B

zjhcj1的博客 1万+

Taro开发微信小程序保持登录状态(本地存储)

Taro开发微信小程序保持登录状态

wangbaobao512的博客 2520

Boost变换电路在新能源车充电系统中的创新应用与挑战

本文探讨了Boost变换电路在新能源车充电系统中的创新应用与挑战,重点分析了其在高压快充、能量回收等场景中的技术突破。通过电力电子仿真和新型器件应用,如SiC MOSFET,显著提升了功率密度和转换效率。同时,文章还深入讨论了电磁兼容性(EMC)挑战及智能控制算法的实际应用,为新能源车充电系统的优化提供了实用解决方案。

7z8x2c4v6b9的博客 217

Unity开发HoloLens应用:从打包到部署的完整指南

本文为Unity开发者提供了将应用部署到HoloLens设备的完整实战指南。详细讲解了从环境准备、Unity项目配置、生成Visual Studio工程,到最终构建APPX安装包并通过设备门户或Visual Studio进行部署的全流程,帮助开发者高效完成混合现实应用的打包与安装。

red88的博客 1018

小程序获取openid保存缓存吗_微信小程序获取用户信息并保存登录状态详解

前言微信小程序的运行环境不是在浏览器下运行的。所以不能以cookie来维护登录态。下面我就来说说我根据官方给出的方法来写出的维护登录态的方法吧。一、登录态维护通过 wx.login() 获取到用户登录态之后,需要维护登录态。开发者要注意不应该直接把 session_key、openid 等字段作为用户的标识或者 session 的标识,而应该自己派发一个 session 登录态(请参考登录时序图)...

weixin_30452659的博客 2264

简单记录一次拿网站后台的过程

本文章重在让大家了解拿后台的逻辑与流程,请不要利用此文章的内容对别人的网站进行攻击破坏,否则后果自负,作者不承担任何责任。

kk的博客 916

微信小程序登录授权流程

小程序授权登陆流程 1、当用户进入微信小程序时,首先我们先判断用户是否授权过此小程序 wx.getSetting({(查看是否授权) sucsess:res=>{//调用成功的回调函数 if (res.authSetting['scope.userInfo']) //{res.authSetting['scope.userInfo']有值时,代表已授权 }else{ //没有授权 }

乘风破浪的程序猿 2万+

22、云数据中心网络(DCN)部署最佳实践

本文详细介绍了云数据中心网络(DCN)部署的最佳实践,涵盖SDN设计、服务网络规划、管理网络规划等方面。通过合理的架构设计、路由规划和组件协同,提升数据中心的自动化水平、可靠性及安全性,以满足不断增长的业务需求。

d6e7f8的博客 185

OpenGL 进阶系列10 - 光线跟踪实现简介(Ray Tracing)

OpenGL 实现光线跟踪(Ray Tracing)是一个相对复杂但有趣的挑战,通常用于生成高度逼真的图像效果,如反射、折射、阴影等。OpenGL 本身并不是为光线跟踪设计的,但可以通过结合计算着色器和现代 OpenGL 功能实现光线跟踪。光线跟踪的基本思路是从相机(或视点)出发,发射光线并计算这些光线与场景中物体的交点。光线与场景中物体相交的计算。计算交点的光照(基于表面法线、光源位置、材质等)。反射和折射的处理(如果物体是透明或反射的)。

GPU全栈博主 1534

小程序微信授权登录php_微信小程序授权及登录教程(二)

在没开始前,要说下,授权和登录,需要先授权才能拿到用户的头像,昵称等信息,当这只是用户信息授权scope具体自己查看,这里主要讲用户信息授权要拿到用户的具体信息,还需要登录,通过wx.login() 获取code,登录流程图如下:微信规则改变后,用户授权需要用户主动触发;open-type="getUserInfo"话不多说上"马",我要飙车了;通过wx.getSetting()判断用户是否授权;...

weixin_30915399的博客 1064

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

微信小程序之保持登录状态即session不改变(Java)

  在微信小程序开发中,由wx.request()发起的每次请求对于服务端来说都是不同的一次会话,微信小程序不会把session信息带回服务端,即对应服务端不同的session,由于项目中使用session保存用户信息所以导致后续请求相当于未登录的情况。   注意,这里的session不是小程序维护的那个通过wx.login()方法维护的session,而是我们自己的服务端的sessi...

anwei0851的博客 1609

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

微信小程序云开发用户身份登录_微信小程序云开发实现授信注册登录?

页面样式想实现点此登录然后弹出授权用户确定后显示用户头像和昵称。后台实现,用户点击授权后,获取用户信息和openid,去云数据库里找,如果没有就获取用户信息保存。然后再使用openid去查找用户信息,然后再将用户信息存入app.js公共变量里。实现登陆。// miniprogram/pages/user/user.jsvar util = require('../tools/tools.js')c...

weixin_39542477的博客 1590

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Java实现微信小程序登录(服务端)

微信小程序的登录,这里只涉及到后端代码,所以默认你是申请了一个小程序并且有了appid和secret。不管怎么说,还是放上官方的文档链接:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.htmlhttps://links.jianshu.com/go?to=https%3A%2F%2Fdevelopers.weixin.qq.com%2Fminiprogram%2Fdev%2Ffram........

乐昊的博客 1万+

uniapp小程序云开发登陆篇最佳实践

第一步,检查是否登录 // App.vue <script> global.isLogin = function() { try { var openid = uni.getStorageSync('openid'); } catch (e) { } if (openid === '') { return false } else { retu...

weixin_30672295的博客 998

php判断登录失效,判断登陆是否失效代码

这次给大家带来判断登陆是否失效代码,判断登陆是否失效注意事项有哪些,下面就是实战案例,一起来看一下。var that = this;new Promise((resolve, reject) => {// 检查wx.login有没有失效,失效的话重新wx.loginwx.checkSession({success() {console.log('code', wx.getStorageSyn...

weixin_42568801的博客 324
上一篇: vue滑块验证组件
下一篇: vue里面实现百度地图 标记多点 地点连线
一天28小时
博客等级 码龄7年 23粉丝 135原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值