黔优媒体网-软文媒体自助发稿平台!
  1. 行业资讯
  2. 正文

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

来源:黔优媒体网   时间:2024-09-19

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

注册/登录

小程序端" 小程序端:

通过上面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的请求为:

(小写为固定写好的,大写为待替换的)
https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

返回:

 //正常返回的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( #39;logining.......... #39;);
 //调用登录接口
 wx.login({
 success: function (e) {
 console.log( #39;wxlogin successd........ #39;);
 var code = e.code;
 wx.getUserInfo({
 success: function (res) {
 console.log( #39;wxgetUserInfo successd........ #39;);
 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( #39;my login successd........ #39;);
 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();
}

相关推荐:

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

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

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

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

微信app下载

微信是一款手机通信软件,支持通过手机网络发送语音短信、视频、图片和文字。微信可以单聊及群聊,还能根据地理位置找到附近的人,带给大家全新的移动沟通体验,有需要的小伙伴快来保存下载体验吧!


【免责申明】黔优媒体网以上展示内容来源于用户自主上传、合作媒体、企业机构或网络收集整理,版权争议与本站无关,文章涉及见解与观点不代表黔优媒体网官方立场,请读者仅做参考,本文标题:微信小程序实现登录功能的逻辑整理;欢迎转载,转载时请说明出处。若您认为本文侵犯了您的版权信息,或您发现该内容有任何违法/违规的内容,请您立即联系我们及时修正或删除。(邮箱号: kefu@qianu.com)