微信小程序一键获取用户头像、昵称等基本信息

本文介绍如何在微信小程序中一键获取用户头像、昵称等基本信息,包括操作流程、关键代码及效果演示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

微信小程序一键获取用户头像、昵称等基本信息

系统:Win10
微信开发工具:Stable v1.03.2005140

根据官方发布更新说明:小程序登录、用户信息相关接口调整说明
对getUserInfo的功能进行了调整,可能已经无法实现下面的效果,请注意!!!

需求描述

在一次开发微信小程序的过程中,需要获取到使用小程序的用户头像和用户昵称,而且只需要一次授权,后面再使用就自动获取用户的信息

功能实现

1.操作流程

  • 用户登录时,使用 wx.getSetting 来查询用户是否授权过
    • 如用户首次登录,则使用 button open-type=‘getUserInfo’ 来调起授权
      • 若未授权或拒绝授权,则一直显示授权按钮
      • 若获得授权,则使用 wx.getUserInfo 来获取用户的头像、昵称等信息
    • 若用户是再次登录,则通过成功返回的 scope.userInfo 来调用用户的头像、昵称等信息

2.目录结构

这里我新建了一段代码片段来测试
在这里插入图片描述

3.关键代码

记得在 app.js 下创建一个全局变量 userInfo

App({
  globalData: {
    userInfo: null
  },
  onLaunch: function () {
    
  }
})

index/index.js

const app = getApp()
var that
Page({
  /* 页面初始数据 */
  data: {
    userInfo: {},
    hidden_actionSheet: true,
  },

  /**
   * 页面加载
   */
  onLoad: function () {
    that = this
    that.isAuthorize().then(res => { //用户已经授权获取基本信息
      wx.getUserInfo({
        success: res => {
          app.globalData.userInfo = res.userInfo
          that.setData({
            userInfo: app.globalData.userInfo,
          })
        }
      })
    }).catch(res => { //用户没有授权获取基本信息
      that.setData({
        hidden_actionSheet: false,
      })
    })
  },

  /* 是否授权获取基本信息,已经授权返回到then,没有授权返回到catch */
  isAuthorize() {
    return new Promise((resolve, reject) => {
      // 获取用户授权状态
      wx.getSetting({
        success: res => {
          if (res.authSetting['scope.userInfo']) {
            console.log("全局--用户已经授权")
            resolve()
          } else {
            console.log("全局--用户还没有授权获取基本信息")
            reject()
          }
        }
      })
    })
  },

  // 底下的取消按钮
  actionSheetChange: function (e) {
    wx.showModal({
      showCancel: false,
      content: '部分功能需要登录才能使用',
    })
  },

  // 获取用户信息:拒绝还是接受都会进入这里
  allowGetUserInfo: function (e) {
    if (e.detail.rawData) { // 权限选择了:允许
      that.setData({
        userInfo: app.globalData.userInfo,
      })
      // 获取用户信息
      wx.getUserInfo({
        success: res => {
          app.globalData.userInfo = res.userInfo
          that.setData({
            userInfo: app.globalData.userInfo,
            hidden_actionSheet: true, // 隐藏actionSheet
          })
        }
      })
    } else { // 权限选择了:拒绝
      wx.showModal({
        showCancel: false,
        content: '部分功能需要登录才能使用',
      })
    }
  },
})

index/index.wxml

<view class="container">
  <view class="userinfo">
    <!-- hasUserInfo为false表示没有获取到用户信息,就显示获取头像昵称的按钮 -->
    <action-sheet hidden="{{hidden_actionSheet}}" bindchange="actionSheetChange">
      <button class="bt_login" open-type="getUserInfo" bindgetuserinfo="allowGetUserInfo"> 微信授权登录 </button>
      <!-- 取消按钮可以不用 -->
      <action-sheet-cancel class='cancel'>取消</action-sheet-cancel>
    </action-sheet>

    <!-- 已获取用户信息,显示头像和昵称 -->
    <block hidden="{{!hidden_actionSheet}}">
      <image class="userinfo-avatar" src="{{userInfo.avatarUrl}}" mode="cover"></image>
      <text class="userinfo-nickname">{{userInfo.nickName}}</text>
    </block>

  </view>
</view>

index/index.wxss

page {
  width: 100%;
  height: 100%;
}

.container {
  width: 100%;
  height: 100%;
}

.userinfo {
  display: flex;
  flex-direction: column;
  align-items: center;
}

.userinfo-avatar {
  width: 128rpx;
  height: 128rpx;
  margin: 20rpx;
  border-radius: 50%;
}

.bt_login {
  width: 200rpx;
  height: 70rpx;
  color: #6699FF;
  border: 3rpx solid #6699FF;
  border-radius: 80rpx;
  font-size: 35rpx;
  margin: 20rpx 0;
  display: flex;
  justify-content: center;
  align-items: center;
}

.cancel {
  font-size: 35rpx;
}

.userinfo-nickname {
  color: #aaa;
}

4.效果演示

下面是测试效果图,除了头像和昵称外,还可以获取用户的国家,城市,性别,语言等信息
在这里插入图片描述

### 实现 UniApp 微信小程序一键获取昵称登录功能 在 UniApp 开发环境中,为了实现微信小程序一键获取昵称并完成登录的功能,主要涉及以下几个方面: #### 获取用户授权状态 首先,在页面加载时检测用户的授权情况。如果用户已经授权,则可以直接展示其基本信息;如果没有授权,则引导用户进行授权操作。 ```javascript // pages/index/index.vue export default { onLoad() { this.checkUserAuthStatus(); }, methods: { checkUserAuthStatus() { uni.getSetting({ success(res) { if (res.authSetting['scope.userInfo']) { console.log('用户已授权'); // 已经授权,可以调用 getUserInfo 获取头像昵称 uni.getUserInfo({ success(infoRes) { console.log('用户信息:', infoRes.userInfo); } }); } else { console.log('用户未授权'); } } }); } } } ``` #### 用户点击按钮触发授权请求 当用户首次访问应用或之前拒绝过权限时,需显示一个按钮让用户主动发起授权请求。这可以通过 `button` 组件配合 `open-type="getUserProfile"` 属性来轻松实现[^2]。 ```html <!-- pages/index/index.vue --> <template> <view class="container"> <!-- 如果用户尚未授权则显示此按钮 --> <button open-type="getUserProfile" @getuserinfo="onGetUserProfile">点击授权</button> <!-- 显示用户信息区域 --> <image :src="avatarUrl"></image> <!-- 头像 --> <text>{{ nickname }}</text> <!-- 昵称 --> </view> </template> ``` #### 授权回调处理函数 一旦用户同意授权,就会触发相应的事件处理器,在这里可以根据返回的数据更新界面以及执行后续业务逻辑,比如保存用户资料至服务器端等。 ```javascript methods: { onGetUserProfile(e) { const { detail } = e; if (!detail.errMsg || !detail.rawData) { console.error('获取用户信息失败'); return; } try { let userInfo = JSON.parse(detail.rawData); // 更新视图中的变量 this.avatarUrl = userInfo.avatarUrl; this.nickname = userInfo.nickName; // 将用户信息发送给后台服务... wx.login({ // 调用微信登录接口获得 code 值 success(loginResult) { // 使用 loginResult.code userInfo 向自己的服务器交换 openid 等信息 // 这里假设有一个名为 'login' 的 API 可用于提交这些数据 uni.request({ url: '/api/login', method: 'POST', data: { js_code: loginResult.code, encrypted_data: detail.encryptedData, iv: detail.iv, signature: detail.signature }, success(response) { // 登录成功后的处理逻辑 } }) } }); } catch(error) { console.error('解析用户信息错误', error); } } } ``` 上述代码片段展示了如何利用 UniApp 提供的能力快速集成微信小程序内的社交化登录特性,并安全地收集必要的个人信息以便于进一步的应用交互服务提供[^3]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李晋江

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值