使用全局变量判断用户是否登录

判断用户是否登录

在项目中有这样的需求,类似于小鸡辞典小程序的显示用户昵称。

目前使用全局变量来实现,最终会使用其他方式实现。

在这里记录下自己的尝试方案,但目前暂未解决,后续要填补这个坑。

app.js:

App({
  onLaunch: function () { }
  
  globalData:{ userInfos:null } /*定义全局变量userInfos,为了不与用户信息重叠,加了s*/
  
})

在获取用户信息的登录页面(假设login.js):

var app = getApp(); //获取全局app

Page({

  data: {
    userInfos:'',  //定义的全局变量
    userInfo:'', //使用新接口获得用户信息的两个方法,此处不展开
    hasUserInfo:false,
  },
  
  getUserProfile(){ 
    wx.getUserProfile({
      desc:'请登录',
      success:(res) => {
        console.log('获取用户信息成功',res)
        let userinfos = res.userInfo //登录需要的用户信息
        var globalUserInfos = app.globalData.userInfos //全局变量的用户信息
        wx.setStorageSync('userinfos', userinfos)
        this.setData({
          userInfos:globalUserInfos,  //使用globalUserInfos,目的为了用户信息赋值给全局变量
          userInfo:userinfos, //登录需要的用户信息
          hasUserInfo:true
        })
      },
      fail:(res) => {
        console.log('获取用户信息失败',res)
      }
    })
  },

在需要判断用户是否登录的页面(假设commit.js):

var app = getApp(); //获取全局app

Page({

  data: {
    userInfos:'', //全局变量的用户信息:问题代码处
    username:'', //用户名
  },
  
  ......
  
  onLoad: function (options) { //在onload方法中赋值给全局变量userInfos
    this.setData({
      userInfos:app.globalData.userInfos
    })
  },

  getUserName(){
    this.setData({
      username:userInfos.nickName //赋值给用户昵称
    })
  },

  commit(){
  if( userInfos = null){ //如果GlobaluserInfo为空,提示需要登录
    wx.showModal({
      title: '请登录',
      content: '请登陆后再发表',
    }else{ 
     const db = wx.cloud.database()
    	db.collection('Sayings').add({ 
      data:{
       ...
       username:GlobaluserInfo //把全局变量赋值给username
      }, }
  	})
  }
  
}

目前报错:userInfos is not defined

 wechat
产品北里,讲述产品和人性、涉及设计、技术和运营的公众号。
你们的赞赏是我更新的动力~