小程序登录授权功能

登录

     首先通过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: "福建"
}
userInfoUserInfo用户信息对象2.10.4
rawDatastring不包括敏感信息的原始数据字符串,用于计算签名2.10.4
signaturestring使用 sha1( rawData + sessionkey ) 得到字符串,用于校验用户信息,详见 用户数据的签名验证和加解密2.10.4
encryptedDatastring包括敏感数据在内的完整用户信息的加密数据,详见 用户数据的签名验证和加解密2.10.4
ivstring加密算法的初始向量,详见 用户数据的签名验证和加解密2.10.4
cloudIDstring敏感数据对应的云 ID,开通云开发的小程序才会返回,可通过云调用直接获取开放数据,详细见云调用直接获取开放数据2.10.4

  注:可以使用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以及解密手机号等。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值