收藏
回答

用wx.login修改授权接口?

之前是用wx.getuserinfo做的用户授权,因为这些接口都要被废弃,所以就用wx.login改接口,现在问题是,有些地方我需要判断用户有没有授权,但是点击授权,提示说授权成功,但是再次打开页面时还会弹出窗口。这个授权做是全局配置,在页面中引用,还有就是头像图片能够插入到数据库中,用户名没有插入。

login文件代码(授权页面):
<form catchsubmit="formSubmit">
  <button class="avatar-wrapper" open-type="chooseAvatar" bind:chooseavatar="onChooseAvatar">
    <image class="avatar" src="{{avatarUrl}}"></image>
  </button> 
  <view class="row">
    <view class="text">用户名</view>
    <input type="nickname" class="weui-input" placeholder="请输入昵称"/>
  </view>
  <button type="primary" style="margin-top:40rpx;margin-bottom: 20rpx;" formType="submit">授权</button>
</form>
js代码:
const defaultAvatarUrl = 'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0'
const db = wx.cloud.database();
const app=getApp();
Page({
  /**
   * 页面的初始数据
   */
  data: {
    avatarUrl: defaultAvatarUrl,
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoadfunction (options{
    
  },
  onChooseAvatar(e) {
    // console.log(e);
    const { avatarUrl } = e.detail 
    this.setData({
      avatarUrl,
    })
  },
  formSubmit(e){
    console.log(e);
    const nickName=e.detail.value.nickName;
    wx.login({
      success (res) {
        console.log(res);
        if (res.code) {
          db.collection("user").add({
            data:{
              code: res.code,
              avatarUrl:defaultAvatarUrl,
              nickName:nickName
            }
          })
          wx.showToast({
            title:"恭喜!授权成功!"
          });
          setTimeout(()=>{
            wx.navigateBack({});
          },1500)
        }
          else {
          console.log('登录失败!' + res.errMsg)
        }
      }
    })
  },
app.js代码:
//app.js
App({
  onLaunchfunction () {
    if(!wx.cloud){
      console.error('请使用2.2.3或以上的基础库以使用云能力')
    }else{
      wx.cloud.init({
        traceUser:true,
      })
    }
    // 展示本地存储能力
    const logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)
    this.globalData={}
    this.loadlogin();
    },
    //判断是否已经授权
  loadlogin:function(){
    const that=this;
    wx.getSetting({
      success:res=>{
        const islogin=res.authSetting['scope.login'];
        if(islogin){
          wx.login({
           success:res=>{
            const login=res.login;
            that.globalData.login=login;
           } 
          })
        }
      }
    })
  },
  //用户授权
  is_loginfunction(){
    if(this.globalData.login){
      return true;
    }else{
      return false;
    }
  },
  setUserInfo:function(login){
    this.globalData.login=login;
   }
})


回答关注问题邀请回答
收藏

1 个回答

  • 微盟
    微盟
    2022-09-26

    你这个流程需要优化一下,

    目前 wx.getuserinfo, wx.getUserProfile 都将废弃,重新设计一下流程,根据基础库版本,去做不同的适配

    具体官方文档链接:https://developers.weixin.qq.com/community/develop/doc/00022c683e8a80b29bed2142b56c01


    2022-09-26
    有用
    回复 2
    • 蓝天☁
      蓝天☁
      发表于移动端
      2022-09-26
      意思就是说,全局的行不通了,每个需要确认有没有授权的接口都需要授权一次,比如说打电话,收藏,获取地图位置这些,都要重新获取用户授权,而不是判断有没有授权?那假如说一个项目几十个需要判断用户有没有授权的情况,那得增加多少重复代码来实现这个功能。说实在,对于我这个初学者来说,整个项目流程这些,一下子还真转不过弯来
      2022-09-26
      回复
    • 蓝天☁
      蓝天☁
      发表于移动端
      2022-09-26
      刚看文档中授权,全局配置授权功能,是不是用wx.authorize这个API?然后有些地方需要获取用户头像的和用户名的地方,再调用wx.login这个API?
      2022-09-26
      回复
登录 后发表内容