登录
wx.login获取用户登录的凭证code,然后将code提交到你的后台来换取 openid ,session_key , unionid 等信息。
wx.login({
success(res){
console.log(res)
if (res.code) {
// 发起网络请求,用于用户登录
wx.request({
url: '后台登录的接口',
data: {
code: res.code
}
})
} else {
console.log('登录失败!')
}
})
返回的数据如下:
{
error: 0,
authkey: "NTM4YU1EM3FFZ203K0FGcXFzWCtuMXhzZnZrU3pBczB4ZUdLSl…3azg5V1Jhd2ZvbC9RaGlCQURaQWYvMldFbDBpcTZqWkVXTQ=="
error: 0
isclose: 0
openid: "oq58a49tflHEOys1tatDjZ1RI67s"
session_key: "tyhfLIrS1keI/Ld+ToT7UA=="
unionid: "oQa-SjuSUKTEuzsDjOk9d3Bfy0w0"
}
openID:用户唯一标识。28位。不需要用户同意就能获取到。
session_key: 会话密钥session_key 是对用户数据进行加密签名的密钥。为了应用自身的数据安全,只在开发服务器和微信服务器中交互,不会发送到前端。
unionID:用户在开放平台的唯一标识符。如果开发者拥有多个移动应用、网站应用、和公众帐号(包括小程序),可通过unionid来区分用户的唯一性。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。29位。需要用户授权或者已经关注过公众号,具体参考UnionID。
wx.checksession来检测用户登录是否已经过期
检查登录态是否过期。 通过 wx.login 接口获得的用户登录态拥有一定的时效性。用户越久未使用小程序,用户登录态越有可能失效。反之如果用户一直在使用小程序,则用户登录态一直保持有效。具体时效逻辑由微信维护,对开发者透明。开发者只需要调用 wx.checkSession 接口检测当前用户登录态是否有效。登录态过期后开发者可以再调用 wx.login 获取新的用户登录态。调用成功说明当前 session_key 未过期,调用失败说明 session_key 已过期。
wx.checkSession({
success: function(){
//session_key 未过期,并且在本生命周期一直有效
},
fail: function(){
// session_key 已经失效,需要重新执行登录流程
wx.login() //重新登录
}
授权
wx.getuserprofile()调起授权弹窗如下所示:
点击允许,返回的数据如下:能够获取到用户的基本信息以及加密后的数据。
{
errMsg: "getUserProfile:ok"
cloudID: "47_Q49IXPuy-S3aFd18vErlZ0i1X409kR-5kjmN3f07Cui2H7ANvXzN0EDeH6Q"
encryptedData: "PzaanUDew/P+EHR49wNjS3MYDvlXwvOM7gkrXw5kqt5Ff46mn6RzuJcLkNnAegZ269uwdye4cJK8eJ09jPTQBhignMoRhE5JknGSFIVUfRf6PGHbjIHD4j1MbiEUr5pjT4s7Jd9
iv: "W1mwxdFIKGyXSLSN/Ujd/g=="
rawData: "{"nickName":"小郭在此~","gender":2,"language":"zh_CN","city":"福州","province":"福建","country":"中国","avatarUrl":"https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTLN9k6OrxNNYLicVx2Mo2iaSKKpQFy6MQWzbNaTt59kFsTa4k7khmEpvDicOkG1pT0p8r0ibjsEq8WZRw/132"}"
signature: "fdb90215cd5008a084782d6ed00741ae52d34a095"
userInfo:
avatarUrl: "https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j41wGTfTLN9k6OrxNNYLicVx2Mo2iaSKKpQFy6MQWzbNaTt59kFsTa4k7khmEpvDicOkG1pT0p8r0ibjsEq8WZRw/132"
city: "福州"
country: "中国"
gender: 2
language: "zh_CN"
nickName: "小郭在此~"
province: "福建"
}
userInfo | 用户信息对象 | ||
rawData | string | 不包括敏感信息的原始数据字符串,用于计算签名 | |
signature | string | 使用 sha1( rawData + sessionkey ) 得到字符串,用于校验用户信息,详见 用户数据的签名验证和加解密 | |
encryptedData | string | 包括敏感数据在内的完整用户信息的加密数据,详见 用户数据的签名验证和加解密 | |
iv | string | 加密算法的初始向量,详见 用户数据的签名验证和加解密 | |
cloudID | string | 敏感数据对应的云 ID,开通云开发的小程序才会返回,可通过云调用直接获取开放数据,详细见云调用直接获取开放数据 |
wx.getSetting检测用户是否已经授权过用户信息。通过wx.getUserProfile来检测用户是调用wx.getuserInfo还是wx.getuserProfile来获取用户信息。代码如下:
wx.getSetting({
success (res) {
console.log(res.authSetting)
// res.authSetting = {
// "scope.userInfo": true,
// "scope.userLocation": true
// }
}
})
if (wx.getUserProfile) {
this.globalData.canIUseGetUserProfile = true
} else {
this.globalData.canIUseGetUserProfile = false
}
}
3、通过openid,session_ke以及encryptedData,iv可以用来换取token以及解密手机号等。