评论

云函数获取openid

获取openid就用它。

代码如下:

app.js:

  //如果担心openid的安全,就用这个函数
  getCloudOpenid: async function () {
    return this.openid = this.openid || (await wx.cloud.callFunction({name: 'login'})).result.OPENID
  },
  //最佳方案。
  getOpenid: async function () {
    (this.openid = this.openid || wx.getStorageSync('openid')) || wx.setStorageSync('openid', await this.getCloudOpenid())
    return this.openid
  },


任何page:

onLoad: async function () {
  console.log(this.openid = await getApp().getOpenid())
},

  //在本page的其他函数里获得openid。
yourFunc: function(){
  console.log(this.openid)
}


云函数login:

const cloud = require('wx-server-sdk')
cloud.init()
exports.main=async()=>{return cloud.getWXContext()}
最后一次编辑于  2020-10-18  
点赞 13
收藏
评论

11 个评论

  • 郑旭东
    郑旭东
    2019-11-23

    老张的语法非常精简。

    顺便我要提醒一下坛子里的其他开发者,我不建议把裸露的openid放在globalData或者storage里面,因为安全问题。云函数环境里的openid是腾讯鉴权好的,100%正确,而放在客户端的openid有被篡改的风险。所以,客户端openid可以用,仅限于用在客户端的逻辑里,严禁把客户端的openid再传递回云端使用。

    如果使用云开发作为后端的,后端逻辑里请实时获取openid,很方便。如果是自有后台,我记得开发文档里也有相关的登录开发指引,按那个指引来对openid进行session化。

    非专业后端开发,以上理解可能有偏差,请指正。

    2019-11-23
    赞同 1
    回复 5
    • 老张
      老张
      2019-11-23
      说得不错,如何使用,大家自己把握。我个人看得比较轻,一个摩托车级的小程序而已,没必要用上航母级别的安全锁。真要被人看上了来破解,那我也是偷着乐,那时再上安全方案好了。
      2019-11-23
      3
      回复
    • Selfay
      Selfay
      2020-02-21
      所以现在的情况就是globalData或者storage不安全,云函数比较安全,但是每次调用都要钱。最安全的情况就是自己搞个高速宽带服务器,通过session_key实时获取,但是这种方案又花钱对吧。/笑
      2020-02-21
      回复
    • 郑旭东
      郑旭东
      2020-02-21回复Selfay
      付费不是很正常吗?阿里云要钱,腾讯云也要钱呀,拥抱云时代
      2020-02-21
      回复
    • 小声点
      小声点
      2020-04-23回复Selfay
      {openid} 变量
      在查询时,当前用户 openid 是常用的变量,在新的安全规则体系下,要求显式传入 openid,因此为了方便开发者、让开发者无需每次先通过云函数获取用户 openid,我们规定查询条件中可使用一个字符串常量 {openid},在后台中发现该字符串时会自动替换为小程序用户的 openid,如假设有安全规则:
      2020-04-23
      1
      回复
    • 奇
      2021-01-15回复小声点
      你好,{openid} 变量 这个有官方文档吗?
      2021-01-15
      1
      回复
  • 不唯有与他人告别
    不唯有与他人告别
    02-25
      //如果担心openid的安全,就用这个函数
      getCloudOpenid: async function () {
        return this.openid = this.openid || (await wx.cloud.callFunction({name: 'login'})).result.OPENID
      },
      //最佳方案。
      getOpenid: async function () {
        (this.openid = this.openid || wx.getStorageSync('openid')) || wx.setStorageSync('openid', await this.getCloudOpenid())
        return this.openid
      },
    


    老哥,这段代码放在app.js哪里啊 ,新人不太懂

    02-25
    赞同
    回复
  • Bingo-码农
    Bingo-码农
    2021-11-26

    请问其他app如果要获取微信用户的openid怎么获取呢?

    2021-11-26
    赞同
    回复
  • 凨雲
    凨雲
    2021-08-21

    大哥 这个有视频吗?


    2021-08-21
    赞同
    回复 1
    • 老张
      老张
      2021-08-21
      东西太简单,到不了录视频的资格。
      2021-08-21
      1
      回复
  • 古新华
    古新华
    2021-03-26

    不使用云开发能获取openid吗,使用自己的服务器

    2021-03-26
    赞同
    回复
  • 林儿响叮当
    林儿响叮当
    2020-12-15

    请问在组件中应该如何调用呢,组件没有初始化函数有点苦恼

    2020-12-15
    赞同
    回复
  • 廖建熙
    廖建熙
    2020-06-17

    你好,云函数什么的都部署成功,可是我为啥还是undefined

    2020-06-17
    赞同
    回复 1
    • 老张
      老张
      2020-06-17
      抄代码也抄对啊。云函数里的代码完全没抄对。
      2020-06-17
      回复
  • 耳东陈
    耳东陈
    2020-06-16

    为什么我copy了还是undefined

    2020-06-16
    赞同
    回复 3
    • 老张
      老张
      2020-06-16
      云函数的接口有调整,需要加async。这句:
      exports.main = async (event) => { return { ...event,...cloud.getWXContext()} }
      2020-06-16
      回复
    • 耳东陈
      耳东陈
      2020-06-16回复老张
      嗯嗯,好的,谢谢
      2020-06-16
      回复
    • 耳东陈
      耳东陈
      2020-06-16回复老张
      我这改成小写的就可以获取到openid了
      2020-06-16
      回复
  • Kk
    Kk
    2020-05-26

    为什么我copy了还是undefined

    2020-05-26
    赞同
    回复
  • jizhao
    jizhao
    2020-05-14

    老哥,app.js里的代码直接复制粘贴么,要怎么改么,语法不对啊

    2020-05-14
    赞同
    回复 3
    • 老张
      老张
      2020-05-14
      直接拷贝。什么错误信息?
      2020-05-14
      回复
    • jizhao
      jizhao
      2020-05-14回复老张
      私信您了
      2020-05-14
      回复
    • 不唯有与他人告别
      不唯有与他人告别
      02-25回复jizhao
      你好,app.js怎么改的啊,能让我看看吗
      02-25
      回复

正在加载...

登录 后发表内容