- 一开始我的处理方式是在页面直接用checkSession,我的session_key是在index.js登录的时候保存到storage,这里check回调的是“success”。
- 但是把此时storage里面的session_key结合授权按钮的参数去进行解密是失败的,需要在当前的Page再登陆一次才能成功。
- 不推荐把session_key存放在缓存。所以以上做法直接跳过。
- 最后参考了一个朋友的做法,在Page onLoad的时候执行一次wx.login(),然后拿到新的session_key,再用此时的新key去解密就通了。或者改为请求解密之前执行一次登录,据说出问题的概率还是很大
- 结尾补充:最后一种方法还有个问题要考虑,就是最好执行获取手机号之前再checkSession一下(尽管没啥用)。
问题源头,由于这个函数在校验session_key的时候,无论是过期的key还是新的key都是success,所以有了之后一些列的问题,session_key的状态没法把控
Page({
data: {
currentSessionKey: null
},
onLoad: function(options) {
const here = this;
wx.login({
success(res) {
if (res.code) {
const data = call(userLogin, {
code: res.code
});
data.then(obj => {
if (!obj.error) {
here.setData({ currentSessionKey: obj.result.session_key })
}
});
}
},
fail(error) {
throw error;
}
});
},
getPhoneNumber: function (e) {
const { encryptedData, iv } = e.detail;
const options = { encryptedData: encryptedData, iv: iv, sessionKey: this.data.currentSessionKey };
here.doGetPhone(options);
},
doMyAction: function() {
},
doGetPhone: function (options) {
const {
sessionKey,
encryptedData,
iv
} = options;
const here = this;
wx.request({
url: 'https://xxx.com/python/decrypt',
method: 'POST',
data: {
sessionKey: sessionKey,
encryptedData: encryptedData,
iv: iv
},
success(res) {
const { countryCode, purePhoneNumber } = res.data;
here.pageForward(countryCode, purePhoneNumber);
},
fail(error) {
console.log(error);
here.pageForward();
}
})
},
pageForward: function(countryCode, purePhoneNumber) {
wx.navigateTo({
url: `/pages/person/index?phone=${purePhoneNumber}`
})
}
})
我那时候弄,搞了快3天。
萌新的血泪史呀😂😂😂