概述
当你开发完了一个小程序并部署上线后,某个微信用户第一次访问这个小程序的时候,会弹出一个授权界面,用户可以选择是否使用微信登录,如果选择是,则直接进入到小程序。当你第二次进入该小程序的时候,你会发现授权界面不会弹出来了,直接就进入小程序了。
这个过程看起来非常的简单,但其实实现起来相当的麻烦和繁琐。涉及到会话、安全、验证等各种各样的问题。下面笔者介绍一下实现这个登录过程的思路。
微信提供小程序登录流程图
我们可以从登录流程时序 找到这张图。想完全看懂张图,需要了解很多东西。我们先来看看微信提供的几个接口。
小程序接口介绍
wx.login()
这个方法是小程序端发起的,如果是使用腾讯团队推出的小程序组件化开发框架的wepy的话,伪代码如下:
wepy.login() .then(res => { const code = res.code })
这样子就可以从微信平台获取一个code,这个code是临时登录凭证
,用于获取openid
的。
wx.request()
这个也是小程序端
发起的,用于请求开发者服务器(也即是我们的应用服务器)上的接口,调用的伪代码如下:
wepy.request({ url: `xxurl`, data: { //入参 }, }) .then(res => { //从res中获取应用服务器返回的数据 })
获取openid的接口
当某个开发主体开发了一个小程序后,当用户访问这个小程序的时候,微信平台会为这个用户分配一个openid。如下接口:
https://api.weixin.qq.com/sns/jscode2session"color: #ff0000">基于token保持会话和登录认证
小程序虽然不支持cookie的机制,但是支持在header里设置token。
这个token是应用服务器生成的。
header: { 'xxxxtoken': token, }当小程序调用应用服务器接口的时候,必须带上这个token,应用服务端则对这个token进行解析和认证。
当然如果是第一次访问小程序,只能由应用服务器先生成token。
笔者打算用伪代码来表达使用token后,整个登录的过程,因为用文字或者图比较难表达。const code = wx.login(); if (code ) {//code存在 //从小程序的本地中获取toten const token = wx.getStorageSync('xxxxxtoken') if (token ) {//小程序本地存有token,无需弹出授权界面 //直接传入code字段,调用应用服务器的验证token的方法,如果校验成功,需要返回用户信息。 const userinfo = wx.request(http://xxxxxValidateToken(code )); if (userinfo) { //说明登录成功,直接进入小程序的主界面。 } } else { //说明小程序本地没有token,这个时候需要弹出授权界面,让微信用户决定是否访问小程序,如果用户选择是的话。 const weixinuserinfo = wx.getUserInfo();//会弹出授权界面,微信提供的 if (weixinuserinfo ){ //生成或者验证token const userinfo = wx.request(http://xxxxxValidateToken(code )); const token = userinfo.getToken(); //将token存储到小程序本地 wx.setStorageSync('xxxxxtoken', token ) } } }上面的伪代码中,会调用应用服务器(我们的应用服务器)的
http://xxxxxValidateToken(code )
方法。这个方法的实现逻辑大概如下:
1、先验证这个微信用户是否存在,可以调用微信提供的
jscode2session
方法,该方法会返回一个openid。我们必须在业务代码里,将这个openid保存到数据库,并和userid关联起来。2、判断是否是新的用户,如果是,则生成token和生成新的一个用户信息存储到数据库。如果不是新的用户,则验证token。
这个流程走完后,小程序就可以通过
wx.request
方法,带上token,真正的访问应用服务器的业务方法,获取业务数据。token的生成和校验
见过有些公司是直接将userid和openid,加密后返回给小程序。也见过用userid和password加密后返回给小程序。如果是选择第二种方式的话,验证token的逻辑大概如下:
先解密,获取userid和password,并根据userid从数据库中获取到用户密码,跟从token中解密出来的password进行比对,如果相等,则校验通过。
总结
现在再回头看看微信提供登录路程图,是否好理解一些了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
小程序登录,用户访问小程序的登录
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新动态
- 第五街的士高《印度激情版》3CD [WAV+CUE][2.4G]
- 三国志8重制版哪个武将智力高 三国志8重制版智力武将排行一览
- 三国志8重制版哪个武将好 三国志8重制版武将排行一览
- 三国志8重制版武将图像怎么保存 三国志8重制版武将图像设置方法
- 何方.1990-我不是那种人【林杰唱片】【WAV+CUE】
- 张惠妹.1999-妹力新世纪2CD【丰华】【WAV+CUE】
- 邓丽欣.2006-FANTASY【金牌大风】【WAV+CUE】
- 饭制《黑神话》蜘蛛四妹手办
- 《燕云十六声》回应跑路:年内公测版本完成95%
- 网友发现国内版《双城之战》第二季有删减:亲亲环节没了!
- 邓丽君2024-《漫步人生路》头版限量编号MQA-UHQCD[WAV+CUE]
- SergeProkofievplaysProkofiev[Dutton][FLAC+CUE]
- 永恒英文金曲精选4《TheBestOfEverlastingFavouritesVol.4》[WAV+CUE]
- 群星《国风超有戏 第9期》[320K/MP3][13.63MB]
- 群星《国风超有戏 第9期》[FLAC/分轨][72.56MB]