« 上一篇

微信小程序登录流程​

    对于小程序的登录流程微信官方文档也有描述不清的情况,作为一个后端开发研究了小程序关于登录的所有信息对整个登录流程做一个梳理。  

    首先明确一点,这里指的小程序登录时wx.login(),并不是授权获取用户信息,这是两个东西,把这一点明确了对整个流程的理解就会比较容易。

    wx.login()的登录用户是无感知的,进行登录之前需要先校验微信小程序的登录态是否过期,过期了才去登录,这里的校验用wx.checkSession进行。wx.login()调用之后获取到code,code传给后端,后端根据code调用微信服务端接口拿到用户的openid、unionid和session_key(用来解密用户的隐私数据)。然后服务端根据自己的原则建立一个token(时间令牌),此token需要能关联到用户的openid并且有过期失效,便于关联到用户和防止泄露。token返回给小程序端(并不是吧openid 和session_key 返回,安全考虑)。用户在之后请求后端接口的过程中需要携带token已校验用户身份。如果token过期需要用户再次调用wx.login()来请求后端获取新的token。

wx.checkSession({
    success(){
        checkLogin();
    },fail(){
       login();
    }
});
function checkLogin(){
    wx.request({
        url:'/api/user/checkLogin',
        data:{
            token:token
        },
        success(res){
            if(已过期){
                login();
            }
        }
        
    });
}
function login(){
     wx.login({
            if (res.code) {
              //发起网络请求
              wx.request({
                url: 'https://test.com/onLogin',
                data: {
                  code: res.code
                },
                success(res){
                    //存储返回的token到storage
                }
              })
            } else {
              console.log('登录失败!' + res.errMsg)
            }    
        });
}

    授权获取用户基本信息,授权后请求后端接口把加密的数据传给后端、后端对数据进行解密(需要用户会话的session_key),然后把数据存储到数据库,理论上用户只需一次授权登录,之后用户的头像昵称等数据都可从后台返回。