微信用户访问小程序的登录过程
概述
当你开发了一个小程序并部署到网上后,当微信用户第一次访问小程序时,会弹出授权界面,用户可以选择是否用微信登录,如果是,直接进入小程序。第二次进入小程序时,会发现授权界面不会弹出,直接进入小程序即可。
这个过程看起来很简单,但实际上实现起来相当麻烦和繁琐。它涉及会话、安全和身份验证等各种问题。下面笔者介绍一下实现这个登录过程的思路。
微信提供小程序登录流程图
我们可以从登录过程序列中找到这张图片。要完全理解这幅画,你需要知道很多事情。我们先来看看微信提供的几个界面。
小程序接口介绍
wx.login()
这个方法是小程序端发起的。如果使用腾讯团队推出的基于组件的小程序开发框架wepy,伪代码如下:
Wepy.login()。然后(RES={constcode=res.code})这样就可以从微信平台获取一个代码,这是一个临时的登录证书,用来获取openid。
同样由applet发起的
wx.request()
用于请求开发者服务器(即我们的应用服务器)上的接口。调用的伪代码如下:
Wepy.request ({URL :`xx URL `,数据: {//引用},})。然后(res={//获取应用服务器从res返回的数据})
获取
openid的接口当某个开发主体开发了一个小程序后,当用户访问这个小程序的时候,微信平台会为这个用户分配一个openid。如下接口:
https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
这个微信接口一般是我们的应用服务器发起调用的,而不是小程序端发起的。
wx.getUserInfo
getUserInfo这个接口用于在微信平台获取用户信息。注意,如果微信用户第一次访问小程序,是弹出一个授权界面的。当用户授权后,getUserInfo才能调用并返回用户数据。
这个四个接口在使用微信访问小程序的时候都会用到的。
基于token保持会话和登录认证
小程序虽然不支持cookie的机制,但是支持在header里设置token。
这个token是应用服务器生成的。
header: { 'xxxxtoken': token, }当小程序调用应用服务器接口的时候,必须带上这个token,应用服务端则对这个token进行解析和认证。当然如果是第一次访问小程序,只能由应用服务器先生成token。笔者打算用伪代码来表达使用token后,整个登录的过程,因为用文字或者图比较难表达。
const code = wx.login();if (code ) {//code存在//从小程序的本地中获取totenconst 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进行比对,如果相等,则校验通过。
总结
现在再回头看看微信提供登录路程图,是否好理解一些了。
版权声明:微信用户访问小程序的登录过程是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。

















