zoukankan      html  css  js  c++  java
  • 小程序开发--API之登录授权逻辑

    小程序登录授权获取逻辑

    原生的小程序提供许多开放接口供使用者开发,快速建立小程序内的用户体系。

    下面将小程序校验、登录、授权、获取用户信息诸多接口串联起来,以便更直观的认识到这些接口是如何在实际应用中使用的。

    一、 检验、登录

    wx.checkSession({
        success: function() {
           //session_key 未过期,并且在本生命周期一直有效
        },
        fail: function() {
            //session_key 已经失效,需要重新执行登录流程
            wx.login({
                success: (res) => {
                    if (res.code) {
                        //发起网络请求
                        wx.request({
                            //开发者服务器通过code换取用户唯一标识openid 和 会话密钥session_key。
                            url: 'https://test.com/onLogin',                  
                            data: {
                                // 临时登录凭证code,并回传到开发者服务器
                                code: res.code
                            },
                            success: function(result) {
                                //返回业务数据,前后端交互身份识别
                            }
                        })
                    } else {
                        console.log('登录失败!' + res.errMsg)
                    }
                }
            });
        }
    })

    login说明:

    1. 小程序调用wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。

    2. 开发者服务器以code换取 用户唯一标识openid 和 会话密钥session_key。

    之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。

    会话密钥session_key有效性:

    开发者如果遇到因为session_key不正确而校验签名失败或解密失败,请关注下面几个与session_key有关的注意事项。

    1. wx.login()调用时,用户的session_key会被更新而致使旧session_key失效。开发者应该在明确需要重新登录时才调用wx.login(),及时通过登录凭证校验接口更新服务器存储的session_key。

    2. 微信不会把session_key的有效期告知开发者。我们会根据用户使用小程序的行为对session_key进行续期。用户越频繁使用小程序,session_key有效期越长。

    3. 开发者在session_key失效时,可以通过重新执行登录流程获取有效的session_key。使用接口wx.checkSession()可以校验session_key是否有效,从而避免小程序反复执行登录流程。

    4. 当开发者在实现自定义登录态时,可以考虑以session_key有效期作为自身登录态有效期,也可以实现自定义的时效性策略。

    二、 授权获取用户信息

    // 可以通过 wx.getSetting 先查询一下用户是否授权了 "scope.record" 这个 scope
    wx.getSetting({
        success(res) {
            if (!res.authSetting['scope.record']) {
                wx.authorize({
                    scope: 'scope.record',
                    success() {
                        // 用户已经同意小程序使用录音功能,后续调用 wx.startRecord 接口不会弹窗询问
                        wx.startRecord()
                    }
                })
            }
        }
    })

    注意:wx.authorize({scope: "scope.userInfo"}),无法弹出授权窗口,请使用 <button open-type="getUserInfo"></button>

    如果用户已经授权,要获取用户信息,调下面接口:

    wx.getSetting({
        success: (res)=>{
            if (res.authSetting['scope.userInfo']) {
                // 已经授权,可以直接调用 getUserInfo 获取头像昵称
                wx.getUserInfo({
                  withCredentials: true,
                  success: (res) => {
                      console.log(res);
                  }                           
                })
            }
        }
    }); 

    注意:

    1. 当用户未授权过,调用该接口将直接报错
    2. 当用户授权过,可以使用该接口获取用户信息
  • 相关阅读:
    每日总结
    每日总结
    团队冲刺阶段二(10)
    团队冲刺阶段二(9)
    团队冲刺阶段二(8)
    团队冲刺阶段二(7)
    团队冲刺阶段二(6)
    团队冲刺阶段二(5)
    团队冲刺阶段二(4)
    根据Panda Global了解,中央政治局第十八次集体学习中指出“区块链技术的集成应用在新的技术革新和产业变革中起着重要作用”
  • 原文地址:https://www.cnblogs.com/lodadssd/p/9132246.html
Copyright © 2011-2022 走看看