最近再做小程序电话号码授权登录问题, 网上看了很多案例, 大部分时将openid 和 session_key 流放到了客户端。
个人认为 openid有两层含义: 1> 此小程序唯一 标识, 整个过程中不会改变
2> 用户支付时,会用到openid
session_key : 是数据加密用的
所以:个人认为 为了安全期间,不能将openid和session_key传输到客户端。
请求大神答疑? 是否可以?
以下为某博客代码:
getPhoneNumber: function (e) {//点击获取手机号码按钮
var that = this;
wx.checkSession({
success: function () {
var ency = e.detail.encryptedData;
var iv = e.detail.iv;
var sessionk = that.data.sessionKey; 此处获取sessionkey是否正确
if (e.detail.errMsg == ‘getPhoneNumber:fail user deny’) {
that.setData({
modalstatus: true
});
} else {//同意授权
wx.request({
method: “GET”,
url: 'https://xxx/wx/deciphering.do’,
data: {
encrypdata: ency,
ivdata: iv,
sessionkey: sessionk
},
header: {
‘content-type’: ‘application/json’ // 默认值
},
success: (res) => {
console.log(“解密成功~~~”);将解密的号码保存到本地
console.log(res);
var phone = res.data.phoneNumber;
console.log(phone);
}, fail: function (res) {
console.log(“解密失败~~~~~~~~~~~~~”);
console.log(res);
}
});
}
},
fail: function () {
console.log(“session_key 已经失效,需要重新执行登录流程”);
that.wxlogin(); //重新登录
}
});}
openId是针对单个小程序的用户的唯一标识。
支付等场景需要验签等操作,所以不存在安全性问题。
大部分开发者选择直接用openId来作为用户的识别方式,是没有问题的。
你上述代码中的session_key只是用来检测用户登录是否过期的。
小程序本来就有这个API:wx.checkSession
这个session_key并不能做一些其他的什么操作,也不存在安全性问题。
参考文档:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.checkSession.html