欢迎光临,了解微信小程序开发,就上易用通!

微信小程序登录逻辑梳理

发布:2018-01-25 11:49浏览: 来源:网络 作者:tianshu

微信小程序登录逻辑梳理(图1)



微信两个api所拿到的信息:login和getUserInfo
微信小程序登录逻辑梳理(图2)



注册/登录小程序端:
通过上面wx.login和wx.getUserInfo两个api拿到相应的信息,并通过上方接口传给自己的服务器.
需要传输的信息有7个参数:
appid  小程序唯一标识secret  小程序的 app secretjs_code  //wx.login登录时获取的 code,用于后续获取session_key//下面两个参数用户服务器端签名校验用户信息的signature 使用 sha1( rawData + sessionkey ) 得到字符串,用于校验用户信息。rawData  不包括敏感信息的原始数据字符串,用于计算签名。//下面两个参数是用于解密获取openId和UnionId的encryptedData  包括敏感数据在内的完整用户信息的加密数据iv 加密算法的初始向量
当然,可以精简为以下三个参数.
其余的签名校验的参数可省略,而appid和secret可以直接写在服务器.
js_code //  wx.login登录时获取的 code,用于后续获取session_keyencryptedData  包括敏感数据在内的完整用户信息的加密数据iv 加密算法的初始向量服务端处理逻辑
相关的信息传输给服务器后,服务器
1.先根据js_code去微信服务器拿到session_key
2.(此步可省略)使用 sha1( rawData + sessionkey )拿到字符串,判断与signature值是否相同,如果相同则用户信息无误,可进行下一步.如果不同,则说明用户信息被篡改或过期.
3.然后根据解密算法自行解密(输入参数为appId,sessionKey,encryptedData,iv,返回一个jsonObj),拿到openId和unionId等信息,执行服务器端的注册/登录操作.
4.注册/登录操作逻辑完成后,将我们服务器的sessionId(或其他token),以及用户信息返回给客户端.
其中,服务器去获取session_key的请求为:
返回:
  1.    //正常返回的JSON数据包
  2.     {
  3.           "openid": "OPENID",
  4.           "session_key": "SESSIONKEY"
  5.           "expires_in": 2592000
  6.     }
  7.     //错误时返回JSON数据包(示例为Code无效)
  8.     {
  9.         "errcode": 40029,
  10.         "errmsg": "invalid code"
  11.     }
复制代码

相关解密算法:
注意:示例代码中有node,c++,php,python的,没有java的.
需要服务器返回的信息:sessionId/token 登录状态标识userInfo: jsonObject,用户在我们平台上的信息,其内容与getPersonalInfo接口返回的相同.最后,将登录操作封装成方法,需要处调用即可
  1. //最终供外面调用的方法
  2. function login(){
  3.     console.log('logining..........');
  4.     //调用登录接口
  5.     wx.login({
  6.         success: function (e) {
  7.             console.log('wxlogin successd........');
  8.             var code = e.code;
  9.             wx.getUserInfo({
  10.                 success: function (res) {
  11.                     console.log('wxgetUserInfo successd........');
  12.                     var encryptedData = encodeURIComponent(res.encryptedData);
  13.                     thirdLogin(code,encryptedData,res.iv);//调用服务器api
  14.                 }
  15.             })
  16.         }
  17.     });
  18. }
  19.  
  20. function  thirdLogin(code,encryptedData,iv){
  21.     var url = "eeee/xxx/login/ttttt";
  22.     var params = new Object();
  23.     params.code = code;
  24.     params.encryptedData = encryptedData;
  25.     params.iv =iv;
  26.  
  27.     buildRequest(new Object(),url,params,{
  28.         onPre: function(page){},
  29.         onSuccess:function (data){
  30.             console.log('my  login successd........');
  31.             console.log(data);
  32.             getApp().globalData.session_id = data.session_id;
  33.             getApp().globalData.uid = data.uid;
  34.             getApp().globalData.isLogin = true;
  35.         },
  36.         onError : function(msgCanShow,code,hiddenMsg){
  37.         }
  38.     }).send();
  39. }
  40.  





免责声明:本站所有文章和图片均来自用户分享和网络收集,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服处理。