微信小程序实现登录功能的逻辑整理

互联网 18-1-30
为了让大家更好的开发微信小程序,本文主要和大家分享微信小程序登录逻辑整理,希望能帮助到大家。

注册/登录

小程序端" style="margin: 0.8em 0px; padding: 0px; box-sizing: border-box; font-weight: 100; line-height: 1.3em; font-size: 2.13em;">小程序端:

通过上面wx.login和wx.getUserInfo两个api拿到相应的信息,并通过上方接口传给自己的服务器.

需要传输的信息有7个参数:

appid  小程序唯一标识  secret  小程序的 app secret  js_code  //wx.login登录时获取的 code,用于后续获取session_key    //下面两个参数用户服务器端签名校验用户信息的  signature 使用 sha1( rawData + sessionkey ) 得到字符串,用于校验用户信息。  rawData  不包括敏感信息的原始数据字符串,用于计算签名。    //下面两个参数是用于解密获取openId和UnionId的  encryptedData  包括敏感数据在内的完整用户信息的加密数据  iv 加密算法的初始向量  当然,可以精简为以下三个参数.   其余的签名校验的参数可省略,而appid和secret可以直接写在服务器.  js_code //  wx.login登录时获取的 code,用于后续获取session_key  encryptedData  包括敏感数据在内的完整用户信息的加密数据  iv 加密算法的初始向量

服务端处理逻辑

相关的信息传输给服务器后,服务器

1.先根据js_code去微信服务器拿到session_key 2.(此步可省略)使用 sha1( rawData + sessionkey )拿到字符串,判断与signature值是否相同,如果相同则用户信息无误,可进行下一步.如果不同,则说明用户信息被篡改或过期. 3.然后根据解密算法自行解密(输入参数为appId,sessionKey,encryptedData,iv,返回一个jsonObj),拿到openId和unionId等信息,执行服务器端的注册/登录操作. 4.注册/登录操作逻辑完成后,将我们服务器的sessionId(或其他token),以及用户信息返回给客户端.

其中,服务器去获取session_key的请求为:

返回:

  //正常返回的JSON数据包      {            "openid": "OPENID",            "session_key": "SESSIONKEY"            "expires_in": 2592000      }      //错误时返回JSON数据包(示例为Code无效)      {          "errcode": 40029,          "errmsg": "invalid code"      }

相关解密算法:

https://mp.weixin.qq.com/debug/wxadoc/dev/api/signature.html

注意:示例代码中有node,c++,php,python的,没有java的.

需要服务器返回的信息:

sessionId/token 登录状态标识userInfo: jsonObject,用户在我们平台上的信息,其内容与getPersonalInfo接口返回的相同.

最后,将登录操作封装成方法,需要处调用即可

//最终供外面调用的方法  function login(){      console.log('logining..........');      //调用登录接口      wx.login({          success: function (e) {              console.log('wxlogin successd........');              var code = e.code;              wx.getUserInfo({                  success: function (res) {                      console.log('wxgetUserInfo successd........');                      var encryptedData = encodeURIComponent(res.encryptedData);                      thirdLogin(code,encryptedData,res.iv);//调用服务器api                  }              })          }      });  }  function  thirdLogin(code,encryptedData,iv){      var url = "eeee/xxx/login/ttttt";      var params = new Object();      params.code = code;      params.encryptedData = encryptedData;      params.iv =iv;      buildRequest(new Object(),url,params,{          onPre: function(page){},          onSuccess:function (data){              console.log('my  login successd........');              console.log(data);              getApp().globalData.session_id = data.session_id;              getApp().globalData.uid = data.uid;              getApp().globalData.isLogin = true;          },          onError : function(msgCanShow,code,hiddenMsg){          }      }).send();  }

相关推荐:

微信小程序获取用户信息如何实现

微信小程序开发遇到的问题汇总

一个微信小程序版知乎实例分享

以上就是微信小程序实现登录功能的逻辑整理的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: 功能
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:微信小程序Page中data数据操作和函数调用详解

相关资讯