收藏
回答

微信授权登录

// 云函数入口文件

const cloud = require('wx-server-sdk')

const axios = require('axios')


cloud.init({

  env: cloud.DYNAMIC_CURRENT_ENV

})


// 这里最好用云函数环境变量存储 APPID 和 APPSECRET

const APPID = '

const APPSECRET = ''


exports.main = async (event, context) => {

  const { code, userInfo } = event


  if (!code{

    return { code: 400, message: '缺少 code 参数' }

  }


  try {

    // 调用微信 jscode2session 接口

    const url = `https://api.weixin.qq.com/sns/jscode2session?appid=${APPID}&secret=${APPSECRET}&js_code=${code}&grant_type=authorization_code`

    const res = await axios.get(url)

    const data = res.data


    if (data.errcode{

      return { code: 400, message: data.errmsg || '调用微信接口失败', wxErr: data }

    }


    const openid = data.openid

    const session_key = data.session_key


    // 生成 token(这里简单示例,用时间戳)

    const token = 'token_' + Date.now() + '_' + Math.random().toString(36).substr(2, 8)


    // 这里可以把 token, openid, userInfo 存入数据库(可选)

    const db = cloud.database()

    const users = db.collection('users')


    // 查找用户是否存在

    const userRecord = await users.where({ openid }).get()

    if (userRecord.data.length === 0{

      // 新用户,插入

      await users.add({

        data: {

          openid,

          nickName: userInfo.nickName ,

          avatarUrl: userInfo.avatarUrl ,

          createTime: new Date()

        }

      })

    } else {

      // 已存在用户,可更新信息

      await users.doc(userRecord.data[0]._id).update({

        data: {

          nickName: userInfo.nickName || userRecord.data[0].nickName,

          avatarUrl: userInfo.avatarUrl || userRecord.data[0].avatarUrl,

          updateTime: new Date()

        }

      })

    }


    return {

      code: 200,

      message: '登录成功',

      data: {

        token,

        userInfo: {

          nickName: userInfo.nickName,

          avatarUrl: userInfo.avatarUrl,

          userId: openid

        }

      }

    }


  } catch (err{

    console.error('wxlogin 云函数出错:', err)

    return { code: 500, message: '服务器异常', error: err }

  }

}



这个是我的云函数,我真机测试,每次授权访问都是只显示的微信用户,不显示该账号真实的昵称和头像,这是正常的吗,我不知道哪里有问题

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

3 个回答

  • showms
    showms
    10-29

    云开发可以免鉴权获取用户的openid,无需再去调接口

    10-29
    有用
    回复
  • 跨商通
    跨商通
    10-29

    有云函数,为什么还需要获取登录code?

    云函数里,不是能直接拿到了用户的openid吗?

    10-29
    有用
    回复
  • 我就是我
    我就是我
    10-29
    我就是我
    10-29
    有用
    回复
登录 后发表内容