【20210408】小程序获取用户信息方式修改

来源:5-4 授权组件login

谢成

2021-04-08

本次代码更新了小程序获取用户信息方式,详见小程序官方通知:《小程序登录、用户信息相关接口调整说明》

基础库 2.10.4 开始支持,但经测试发现2.10.4后的很多版本目前暂时还不支持新的API,所以建议大家把基础库的版本调整成最新版

该帖子中使用的调试基础库与开发工具均为写这篇帖子时的最新版:调试基础库版本为:2.16.0,开发工具版本1.05.2104012

课程中需要修改的代码:

  • /miniprogram/components/login/login.wxml文件
    原有bindgetuserinfo修改为bindtap
<button class="login" bindtap="onGotUserInfo">获取微信授权信息</button>
  • /miniprogram/components/login/login.js文件
    原有方式直接通过event获取用户信息,现在需要调用wx.getUserProfile()接口获取用户信息
onGotUserInfo() {
    wx.getUserProfile({
        desc: '用于发布信息时获取头像与昵称',
        success: (res) => {
            console.log(res)
            this.setData({
                modalShow: false
            })
            this.triggerEvent('loginsuccess', res.userInfo)
        },
        fail: (err) => {
            console.log(err)
            this.triggerEvent('loginfail')
        }
    })
}

wx.getUserProfile()方法每次请求都会弹出授权窗口,用户同意后返回 userInfo。旧的获取方式中,可以使用wx.getSetting()返回值中的res.authSetting['scope.userInfo']来判断该用户是否对该小程序授权过,然后通过wx.getUserInfo()静默获取用户信息。但新的获取方式中,wx.getSetting()返回值已不再包括scope.userInfo,所以无法知晓该用户是否对该小程序授权过。这样其实是在每次获取用户信息时,都需要用户知晓并确认。所以在该项目中,在需要用户信息的地方可以直接调用login授权组件通过wx.getUserProfile()来授权。

  • /miniprogram/pages/blog/blog.js文件
    用户在发布博客时,调用blog.jsonPublish()方法,原有方式通过wx.getSetting()判断是否授权,现在方式需要直接弹出授权框

    // 发布功能
    onPublish() {
      this.setData({
        modalShow: true,
      })
      // 判断用户是否授权
      /* wx.getSetting({
        success: (res) => {
          console.log(res)
          if (res.authSetting['scope.userInfo']) {
            wx.getUserInfo({
              success: (res) => {
                // console.log(res)
                this.onLoginSuccess({
                  detail: res.userInfo
                })
              }
            })
          } else {
            this.setData({
              modalShow: true,
            })
          }
        }
      }) */
    },
    
  • /miniprogram/pages/blog-ctrl/blog-ctrl.js文件
    用户在发布博客时,调用blog-ctrl.jsonComment()方法,原有方式通过wx.getSetting()判断是否授权,现在方式需要直接弹出授权框

    onComment() {
        this.setData({
          loginShow: true,
        })
        // 判断用户是否授权
        /* wx.getSetting({
          success: (res) => {
            console.log(res)
            if (res.authSetting['scope.userInfo']) {
              wx.getUserInfo({
                success: (res) => {
                  userInfo = res.userInfo
                  // 显示评论弹出层
                  this.setData({
                    modalShow: true,
                  })
                }
              })
            } else {
              this.setData({
                loginShow: true,
              })
            }
          }
        }) */
      },
    
写回答

7回答

谢成

提问者

2021-04-08

请大家认真查看更新内容

3
7
关中农家人
老师,小程序用户头像昵称获取规则又调整了, wx.getUserProfile被收回,调整为头像昵称填写能力,有什么应对方法么? https://developers.weixin.qq.com/community/develop/doc/00022c683e8a80b29bed2142b56c01
2022-10-31
共7条回复

慕粉2337581

2022-03-09

用了新方式以后每次都需要授权,这样是正常的吗

0
0

乌拉乌拉乌拉乌拉

2021-05-08

老师我想问一下你是江大毕业的吗?和我认识的一个好像

0
1
谢成
可能是撞脸了。。。我大学是在哈尔滨读的
2021-05-08
共1条回复

sjdka

2021-05-04

老师,这样改完之后每次授权完之后那个授权弹出框并不会自动收起,需要手动关闭,如何解决?

0
1
谢成
请检查下modalShow的状态是否正确。
2021-05-06
共1条回复

幕布斯6331728

2021-05-02

老师,更改之后消息模板并没有推送是为什么呀

0
1
谢成
模板消息已经被废弃了,消息推送需要使用订阅消息,具体使用方式可以参考课程《11-3》这一小节的视频。
2021-05-06
共1条回复

慕UI5549312

2021-04-28

谢老师您好,我对官方的修改理解不深,觉得每次都弹窗太烦了。请问如果我使用本地存储和数据库一起来存放用户的授权信息,会有什么潜在问题吗?我搜了搜好像很少有人这么存,流程如附图。//img.mukewang.com/szimg/6088dec109ac3d4304010582.jpg

0
3
qq_慕姐8203528
我把用户信息存到了storage中,然后在存储的时候设置了一个存储时间,在取出的时候,判断如果过了我设定的时间就返回为null,然后再页面加载的时候获取登录授权信息是否授权,如果授权就把button给隐藏掉,并且给用户提示已经授权过了
2022-08-11
共3条回复

SK2020

2021-04-08

感谢谢老师

0
0

微信小程序云开发-从0打造云音乐全栈小程序

横跨小程序端、云后端、CMS一站式云开发的小程序全栈课程

1938 学习 · 2768 问题

查看课程