亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 課堂 > 小程序 > 正文

微信小程序登錄數據解密及狀態維持實例詳解

2020-03-21 15:57:46
字體:
來源:轉載
供稿:網友

本文實例講述了微信小程序登錄數據解密及狀態維持。分享給大家供大家參考,具體如下:

學習過小程序的朋友應該知道,在小程序中是不支持cookie的,借助小程序中的緩存我們也可以存儲一些信息,但是對于一些比較重要的信息,我們需要通過登錄狀態維持來保存,同時,為了安全起見,用戶的敏感信息,也是需要加密在網絡上傳輸的。

前臺,service。封裝了http請求,同時封裝了getSession(通過code獲取服務器生成的session)、getUserInfo(獲取用戶信息)、getDecryptionData(解密數據)

//service.js//封裝了http服務,getUserInfo,提供回調函數var recourse = { doMain: "http://www.domain.com/"}module.exports = { //Http Get requestGet: function (url, data, cb) {  wx.request({   url: recourse.doMain + url,   data: data,   method: 'GET',   header: {},   success: function (res) {    cb(res, true)   },   fail: function () {    cb(data, false)   }  }) }, //Http POST requestPost: function (url, data, cb) {  wx.request({   url: recourse.doMain + url,   data: data,   method: 'POST',   header: {},   success: function (res) {    cb(res, true)   },   fail: function () {    cb(data, false)   }  }) }, //獲取第三方sessionId getSession: function (code, cb) {  wx.request({   url: recourse.doMain + 'SmallRoutine/PostCode',   data: { code: code },   method: 'POST',   success: function (res) {    cb(res, true)   },   fail: function (res) {    cb(res, false)   }  }) }, //獲取用戶信息 getUserInfo: function (cb) {  wx.getUserInfo({   success: function (res) {    cb(res, true)   },   fail: function (res) {    cb(res, false)   }  }) }, //獲取解密數據 getDecryptionData: function (cb) {  wx.request({   url: recourse.doMain+'SmallRoutine/Decryption',   data: {    encryptedData: wx.getStorageSync('encryptedData'),    iv: wx.getStorageSync('iv'),    session: wx.getStorageSync('thirdSessionId'),   },   method: 'POST',   success: function (res) {    cb(res, true)   },   fail: function (res) {    cb(res, false)   }  }) }}

后臺,根據code獲取session,客戶端用來保持登錄狀態

[HttpPost]public ActionResult PostCode(string code){  try  {    if(!string.IsNullOrEmpty(code))    {      HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(string.Format("https://api.weixin.qq.com/sns/jscode2session?appid={0}&secret={1}&js_code={2}&grant_type=authorization_code",appId,appSecret,code));      request.Method = "GET";      HttpWebResponse response = (HttpWebResponse)request.GetResponse();      StreamReader sr = new StreamReader(response.GetResponseStream());      string content = sr.ReadToEnd();      if(response.StatusCode == HttpStatusCode.OK)      {        var successModel = Newtonsoft.Json.JsonConvert.DeserializeObject<ValidateCodeSuccess>(content);        if(null != successModel.session_key)        {          //session_key是微信服務器生成的針對用戶數據加密簽名的密鑰,不應該傳輸到客戶端          var session_key = successModel.session_key;          //3re_session用于服務器和小程序之間做登錄狀態校驗          var thirdSession = Guid.NewGuid().ToString().Replace("-","");          var now = DateTime.Now;          //存到數據庫或者redis緩存,這里一小時過期          Service.AddLogin(new Domain.Login()          {            Code = code,            Createime = now,            OpenId = successModel.openid,            OverdueTime = now.AddMinutes(60),            SessionKey = successModel.session_key,            SessionRd = thirdSession          });          return Json(new { success = true,session = thirdSession,openId = successModel.openid });        }        else        {          var errModel = Newtonsoft.Json.JsonConvert.DeserializeObject<ValidateCodeFail>(content);          return Json(new { success = false,msg = errModel.errcode + ":" + errModel.errmsg });        }      }      else      {        var errModel = Newtonsoft.Json.JsonConvert.DeserializeObject<ValidateCodeFail>(content);        return Json(new { success = false,msg = errModel.errcode + ":" + errModel.errmsg });      }    }    else    {      return Json(new { success = false,msg = "code不能為null" });    }  }  catch(Exception e)  {    return Json(new { success = false });  }}

解密敏感信息

[HttpPost]public ActionResult Decryption(string encryptedData,string iv,string session){  try  {    var sessionKey = Service.GetSessionKey(session);    if(!string.IsNullOrEmpty(sessionKey))    {      var str = AESDecrypt(encryptedData,sessionKey,iv);      var data = Newtonsoft.Json.JsonConvert.DeserializeObject<EncryptedData>(str);      if(null != data)      {        //服務器可以更新用戶信息        return Json(new { success = true,data = data });      }    }  }  catch(Exception e)  {    Service.AddLog("翻譯錯誤:"+e.ToString());  }  return Json(new { success = false });}

AES解密

public static string AESDecrypt(string encryptedData,string key,string iv){  if(string.IsNullOrEmpty(encryptedData)) return "";  byte[] encryptedData2 = Convert.FromBase64String(encryptedData);  System.Security.Cryptography.RijndaelManaged rm = new System.Security.Cryptography.RijndaelManaged  {    Key = Convert.FromBase64String(key),    IV = Convert.FromBase64String(iv),    Mode = System.Security.Cryptography.CipherMode.CBC,    Padding = System.Security.Cryptography.PaddingMode.PKCS7  };  System.Security.Cryptography.ICryptoTransform ctf = rm.CreateDecryptor();  Byte[] resultArray = ctf.TransformFinalBlock(encryptedData2,0,encryptedData2.Length);  return Encoding.UTF8.GetString(resultArray);}

判斷用戶是否掉線

[HttpPost]public ActionResult PostSession(string session){  if(!string.IsNullOrEmpty(session))  {    var loginInfo = Service.GetLoginInfo(session);    if(null != loginInfo)    {      return Json(new { success = true,openId = loginInfo.OpenId });    }    else    {      return Json(new { success = false });    }  }  return Json(new { success = false });}

前臺index.js

//index.jsvar app = getApp()Page({ data: {  userInfo: {}, }, onLoad: function () {  var that = this  app.getUserInfo(function (userInfo) {   //更新數據   that.setData({    userInfo: userInfo   })  }) }})

前臺app.js

var service = require('./service/service.js')var appConfig = {  getUserInfo: function (cb) {    var that = this    if (that.globalData.userInfo) {      //從緩存中用戶信息    } else {      //wx api 登錄      wx.login({        success: function (res) {          console.log('登錄成功 code 為:' + res.code);          if (res.code) {            service.getSession(res.code, function (res, success) {              if (success) {                console.log('通過 code 獲取第三方服務器 session 成功, session 為:' + res.data.session);                //緩存起來                wx.setStorageSync('thirdSessionId', res.data.session);                //wx api 獲取用戶信息                service.getUserInfo(function (res, success) {                  if (success) {                    console.log('獲取用戶信息成功, 加密數據為:' + res.encryptedData);                    console.log('獲取用戶信息成功, 加密向量為:' + res.iv);                    //緩存敏感的用戶信息,解密向量                    wx.setStorageSync('encryptedData', res.encryptedData);                    wx.setStorageSync('iv', res.iv);                    that.globalData.userInfo = res.userInfo;                    //解密數據                    service.getDecryptionData(function (res, success) {                      if (success) {                        console.log("解密數據成功");                        console.log(res.data.data);                      } else {                        console.log('解密數據失敗');                      }                    })                  } else {                    console.log('獲取用戶信息失敗')                  }                });              } else {                console.log('通過 code 獲取第三方服務器 session 失敗');              }            });          } else {            console.log('登錄失敗:');          }        }      })    }  },  globalData: {    userInfo: null  }}App(appConfig)

運行輸出

微信小程序,數據解密,狀態維持

希望本文所述對大家微信小程序開發有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品啪在线观看麻豆免费| 欧美电影在线播放| 国产精品69久久| 法国裸体一区二区| 国产精品福利久久久| 亚洲欧美制服丝袜| 亚洲欧美变态国产另类| 精品香蕉一区二区三区| 日韩大片免费观看视频播放| 久久久999精品视频| 日韩网站在线观看| 色青青草原桃花久久综合| 日韩在线播放一区| 欧美日韩国产精品一区二区三区四区| 欧美猛交ⅹxxx乱大交视频| 亚洲字幕一区二区| 亚洲伊人久久综合| 91久热免费在线视频| 另类图片亚洲另类| 九九热这里只有在线精品视| 啪一啪鲁一鲁2019在线视频| 在线观看免费高清视频97| 日韩欧美在线观看| 亚洲精品久久7777777| 午夜精品理论片| 国产精品一区久久| 亚洲精品videossex少妇| 日韩av快播网址| 国模私拍视频一区| 亚洲变态欧美另类捆绑| 国产精品r级在线| 在线性视频日韩欧美| 久久久久久久999精品视频| 国产精品www网站| 久久久999国产精品| 精品亚洲国产成av人片传媒| 精品国产美女在线| 久久久久日韩精品久久久男男| 久久99久久99精品中文字幕| 日韩中文字幕网| 精品国产欧美一区二区三区成人| 欧美福利视频在线| 久久手机免费视频| 欧美做受高潮1| 日韩精品欧美国产精品忘忧草| 亚洲人成网7777777国产| 不用播放器成人网| 激情亚洲一区二区三区四区| 欧美中文在线观看国产| 欧美孕妇毛茸茸xxxx| 日韩亚洲欧美中文高清在线| 精品一区二区三区四区在线| 欧美影院在线播放| 亚洲成人精品久久久| 国产乱肥老妇国产一区二| 国模gogo一区二区大胆私拍| 久久久久久久国产精品视频| 日韩精品视频中文在线观看| 国产精品一区二区久久久| 欧美日韩不卡合集视频| 国产精品专区第二| 亚洲精品福利免费在线观看| 国产一区二区在线播放| 欧美高清视频在线| 奇米影视亚洲狠狠色| 欧美另类老女人| 一区二区三区久久精品| 久久国产视频网站| 亚洲欧美国产日韩天堂区| 午夜精品一区二区三区在线视| 欧美一区二区大胆人体摄影专业网站| 日韩欧美在线字幕| 国产一区二区三区毛片| 国产专区精品视频| 九九久久国产精品| 欧美福利小视频| 91九色单男在线观看| 亚洲国产精品电影在线观看| 欧美精品一区三区| 日韩精品在线视频| 国产精品观看在线亚洲人成网| 亚洲在线免费看| 亚洲成人999| 国产精品入口夜色视频大尺度| 亚洲色图13p| 国产午夜精品视频免费不卡69堂| 亚洲人成免费电影| 国产免费一区视频观看免费| 国产午夜一区二区| 亚洲色图美腿丝袜| 国外视频精品毛片| 中文字幕九色91在线| 国产成人精品久久久| 国产日韩精品在线播放| 奇米4444一区二区三区| 久久久欧美一区二区| 精品欧美aⅴ在线网站| 久久国产精品99国产精| 国产一区二区丝袜高跟鞋图片| 另类视频在线观看| 久久精品青青大伊人av| 一区二区三区黄色| 日韩国产精品亚洲а∨天堂免| 亚洲片国产一区一级在线观看| 国产经典一区二区| 成人精品在线视频| 国产精品麻豆va在线播放| 国产噜噜噜噜久久久久久久久| 亚洲电影免费观看高清完整版在线观看| 日韩成人网免费视频| 中文字幕无线精品亚洲乱码一区| 日韩国产精品视频| 国产91精品高潮白浆喷水| 久久精品一本久久99精品| 久久99热精品这里久久精品| 亚洲人成网站免费播放| 欧美亚洲午夜视频在线观看| 国产精品女主播| 亚洲精品自拍第一页| 欧美成人免费大片| y97精品国产97久久久久久| 国产主播在线一区| x99av成人免费| 成人亚洲综合色就1024| 亚洲精品日韩欧美| 一区二区国产精品视频| 久久久久久久久久亚洲| 欧美日韩国产二区| 95av在线视频| 亚洲在线观看视频| 亚洲电影成人av99爱色| 日韩日本欧美亚洲| 日韩大片在线观看视频| 成人性生交大片免费观看嘿嘿视频| 国产欧美精品日韩精品| 午夜精品一区二区三区在线播放| 欧美怡春院一区二区三区| 丝袜一区二区三区| 国产日产久久高清欧美一区| 日韩精品中文在线观看| 少妇久久久久久| 亚洲欧美国产日韩天堂区| 亚洲国产欧美一区二区丝袜黑人| 亚洲bt天天射| 亚洲性日韩精品一区二区| 性欧美视频videos6一9| 欧美激情一区二区三级高清视频| 成人免费视频网址| 美日韩精品免费观看视频| 欧美一级在线亚洲天堂| 亚洲新中文字幕| 国产中文欧美精品| 国产精品久久久久久久美男| 亚洲欧美综合精品久久成人| 国产成人高清激情视频在线观看| 国产精品一区二区三区久久久| 日韩在线免费av| 7m第一福利500精品视频| 亚洲精品美女在线观看| 欧美一区二三区| 日韩视频第一页| 国产精品自产拍在线观看| 亚洲精品成a人在线观看| 欧美片一区二区三区|