评论

关于小程序授权登录流程思路

在进入小程序的时候要判断是否有授权,如果没有授权,则要先授权之后,才能登陆到小程序的首页

授权登录是为了获取用户得信息、昵称、以及头像id,若没有授权登录,用户无法正常访问并使用小程序。

小程序授权登录流程,如下图:

一、小程序的状态有哪几种状态以及发展的方式

如上图所示,我个人归纳为三种

1,未授权状态

2,授权未注册状态

3,授权未登录状态

1.判断是否有授权

1.在进入小程序的时候要判断是否有授权,如果没有授权,则要先授权之后,才能登陆到小程序的首页。

 wx.getSetting({
      // 用户获取当前小程序授权状态
      success(res) {
        console.log(res.authSetting["scope.userInfo"])
        // 判断它是否为true
        if (res.authSetting["scope.userInfo"]) {
          //  证明我已经授权过
          console.log("授权")
        } else {
          //  未授权,就跳转到授权的button按钮页面,也可以是个人信息页面
          console.log("未授权")
          // 先跳转至用户授权登录页面
          wx.navigateTo({
            url: '../../pages/login/login',
          })
        }
      }
    })


2.若已经授权

若已经授权,获取用户信息,存在全局的data里,若没有授权,跳转到login页,进行授权操作

使用 button 组件,并将 open-type 指定为 getUserInfo 类型,获取用户基本信息

就是 通过点击按钮 触发 getUserInfo 接口 获取用户信息

用户点击 授权登录 就可以获取到 用户的信息

<view>
  <!-- 小程序里的组件 已封装好的 -->
  <!-- bindgetuserinfo用户点击该按钮时,会返回获取到的数据 -->
  <button open-type="getUserInfo" bindgetuserinfo="getUserInfo">
    用户授权登录
  </button>
  <image src="../../icon_png/111.png" class="aaa"></image>
</view>
<!-- 默认不显示 -->
<view wx:if="{{userInfo.nickName}}" class="xinxi">
  <text>
    昵称:{{userInfo.nickName}}
  </text>
  <text>
    <!-- 性别: {{userInfo.gender==1?'男': '女'}} -->
  </text>
  <view>
    <image src="{{userInfo.avatarUrl}}"></image>
  </view>
</view>


3.授权

授权成功,获取用户信息成功之后,将用户信息存储在本地缓存中指定的 userInfo 中,然后跳转到小程序首页

// 登录**   // 进入授权button的binggetuserinfo回调   // 调用 wx.login获取code
  login() {
    wx.login({
      success: async (res) => {
        console.log(res.code); // 打印临时凭证
        if (res.code) {
          let { //发起网络请求
            data
          } = await ajaxLogin(res.code);
          if (data.code != 10000) {
            // 登录
            wx.setStorage({ // 进行存储
              data: data.data.token, //存储得是token
              key: 'token',
            })
            wx.switchTab({
              url: '../index/index',
            })
          } else {
            // 注册
            this.zhuce()
          }
        } else {
          console.log("登录失败!" + res.errMsg);
        }
      }
    });
  },
  // 注册
  zhuce() {
    wx.login({
      success: async res => {
        let {
          data: hh
        } = await ajaxZhu({
          code: res.code,
          encryptedData: this.data.encryptedData,
          iv: this.data.iv
        })
        if (hh.code == 0) {
          this.login()
        }
      }
    })
  },


登录的时候 还需要调用一下 wx.login() 方法

调用接口获取登录凭证(code)。通过凭证进而换取用户登录态信息,包括用户的唯一标识(openid)及本次登录的会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成

总结

由于APP中有些页面默认需要登录的,如[个人中心]页面,需要登录获取到用户信息,才能继续操作。

总归来说就是:1.在进入小程序的时候要判断是否有授权,如果没有授权,则要先授权之后,才能登陆到小程序的首页。

刚开始,我把login页当作了小程序的首页,这样导致如果已经授权过,这个页面也会一闪而过。用户体验不好。捋了一下思路之后认为,应该把授权的判断放在app.js中onLaunch生命周期里,首页还是正常的index页面。

若已经授权,获取用户信息,存在全局的data里,若没有授权,跳转到login页,进行授权操作

2.授权成功,获取用户信息成功之后,将用户信息存储在本地缓存中指定的 userInfo 中,然后跳转到小程序首页

3.之后不论在哪个页面,如果需要用户信息,从本地缓存中异步获取指定 userInfo 的内容即可

最后一次编辑于  2022-11-09  
点赞 2
收藏
评论
登录 后发表内容