微信小程序 uni.login 获取登陆code

2,289 阅读1分钟

记录一下

每次用户 退出登录 或者 登录失效 后,进入小程序都要重新走一遍登录流程,为了提升用户体验,所以优化登陆流程,使用两种登陆场景:

1、正常登录流程

2、code登录流程(根据微信code静默登录(已存在且绑定手机号))

使用code登录,每次打开小程序 先使用code登录 ,用code去拿到openid,通过openid查库, 有这个用户话,返回登录信息,自动登录小程序,用户不用在走一遍登录流程, 如果用户不存在 再跳转登录页面进行登陆。

getUserInfoByCode() {
                var that = this;
                uni.login({   //获取code
                    provider: 'weixin',
                    success: function(wxcode) {
                        console.log(wxcode.code)
                        //拿到code后进行的操作
                        //调用后端的code接口,把code传给后端
                        //后端返回的用户信息存到本地,表示用户已是登陆状态
                    }
                });
            },

//完整的代码 
// 通过微信code获取用户信息
    getUserInfoByCode() {
      return new Promise((resolve, reject) => {
        uni.login({
          success: async wxcode=> {
            let res = await this.$api.resolve('wxLogin_code', {
              wxCode: wxcode.code
            })
            uni.setStorageSync('userData', res) // 用户信息
            uni.setStorageSync('authentication', res.authentication) // 鉴权码
            this.$setData('common.userData', res) // 存储用户信息
            resolve()
          },
          fail() {
            resolve()
          }
        })
      })
    },

注意:每次调用uni.login 得到的code都不一样,如果出现得到的code相同的情况(在一定时间内获取相同code情况),可能会导致获取openid失败(可能是调用了两遍接口)后台做一下幂等就行了。