微信小程序登陆

官方文档

小程序登陆

登陆时序图:

微信小程序前端:

<button type="primary" plain open-type="getUserInfo" bindgetuserinfo="handleGetUserInfo">
    登录
</button>
handleGetUserInfo(e) {
    // console.log(e.detail.userInfo);
    if (e.detail.userInfo) {
      // 将用户登陆信息保存到本地
      //console.log("登陆信息:" + e.detail.userInfo);
      wx.setStorageSync('userInfo', e.detail.userInfo);
      this.setData({
        isLogin: true
      })
      wx.login({
        success: function(res){
          let code = res.code;
          request({
            url: "/js/stuquery/login",
            data: code,
            header: {
                "Content-Type":"application/json"
            },
            method: 'POST'
          })
          .then(result => {
            //判断登陆之后,返回的个人信息是否为空,如果个人信息为空的话,说明账号未被绑定,登陆状态不写入本次存储
            if(JSON.stringify(result.data) !== '{}'){
              wx.setStorageSync('student', result.data.student);
            }
          })
        }
      })

      // 刷新页面
      this.onShow();

    } else {
      console.log("用户拒绝授权!");
    }
  }

一般来说,我们登陆的目的是两个:

  1. 登陆之后,获取我们自己服务器上的信息
  2. 微信登陆之后获取微信用户的信息

我尝试过使用wx.login之后获取微信用户的信息,即调用wx.getuserinfo,但是,这会有一个问题,可能会无法获取到用户的授权(按照我们平常的思路应该是,用户点击登陆之后,微信小程序弹出授权弹框)

比如这样:

<button type="primary" plain bind:click="login">
    登录
</button>
  login(){
    let _this = this;
    wx.login({
      success: function(res){
        //   1. 获取code
        let code = res.code;
        // console.log(code)
        request({
          url: "/js/stuquery/login",
          data: code,
          header: {
              "Content-Type":"application/json"
          },
          method: 'POST'
      })
      .then(result => {
        // 判断是否绑定了
        wx.setStorageSync('result', result.data);
        wx.setStorageSync('student', result.data.student);

        _this.setData({
          isLogin: true
        })

        wx.getSetting({
          success: function(res){
            // 如果用户没有授权
            console.log(res.authSetting['scope.userInfo'] === undefined);
            if (undefined===res.authSetting['scope.userInfo']) {
              console.log("开始授权");
              wx.authorize({
                scope: 'scope.userInfo',
                success(){
                  console.log('授权完成')
                },
                fail(){
                  console.log("授权失败")
                }
              })
            }else{
              console.log("用户已经授权")
            }
          }
        })
      })
      }
    })
  },

像上面这种做法,不知道是什么原因,wx.authorize无法调起弹框获取用户授权,所以一直是fail的状态

posted @   Kelvin's  阅读(162)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示