当前位置:   article > 正文

微信小程序获取用户信息(getUserProfile接口回收后)——通过头像昵称填写获取用户头像和昵称_uni.getuserprofile被收回了

uni.getuserprofile被收回了

背景:最近在用uniapp写微信小程序授权登录的时候,发现项目在微信开发者工具中调试是正常的,但是在真机运行时,返回的用户数据中昵称变成了微信用户,头像变成了默认的灰底头像。接着去百度了一下发现出现这个问题的原因是getUserProfile接口被回收了,微信小程序基础库在2.27.1及以上版本的不再支持getUserProfile接口获取用户头像昵称了,改用头像昵称填写的方式去获取用户头像和昵称信息。详情可见官网

小程序用户头像昵称获取规则调整公告

头像昵称填写

 所以就把项目中的微信登录部分改成了2.27.1以下的版本还是用getUserProfile接口,2.27.1及以上的版本用头像昵称填写能力。下面是通过头像昵称填写能力获取用户头像和昵称的简单实现(uniapp)。

wx-login-popup.vue文件

  1. <template>
  2. <view class="container" v-if="isVisible">
  3. <!-- 标题 -->
  4. <view class="title">
  5. <text>获取昵称头像</text>
  6. <text>未选择头像则为默认头像</text>
  7. </view>
  8. <!-- 选择头像 -->
  9. <view class="choose-avatar-row">
  10. <button class="avatar-wrapper" open-type="chooseAvatar" @chooseavatar="onChooseAvatar">
  11. <image class="avatar" :src="avatarUrl"></image>
  12. </button>
  13. <text>点击选择头像</text>
  14. </view>
  15. <!-- 选择昵称 -->
  16. <view class="choose-nickname-row">
  17. <text>昵称</text>
  18. <input v-model="nickName" @input="inputName" type="nickname" placeholder="请输入昵称" />
  19. </view>
  20. <!-- 按钮 -->
  21. <view class="login-row">
  22. <button @click="close">关闭</button>
  23. <button @click="submit" :class="{'inactive' : disabled}" :disabled="disabled">登录</button>
  24. </view>
  25. </view>
  26. </template>
  27. <script>
  28. export default {
  29. name: "wx-login-popup",
  30. data() {
  31. return {
  32. avatarUrl: 'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0', // 默认头像
  33. nickName: '',
  34. // 控制登录按钮是否可用
  35. disabled: false
  36. };
  37. },
  38. props: {
  39. isVisible: {
  40. type: Boolean,
  41. default: false
  42. }
  43. },
  44. watch: {
  45. // 只要昵称填写了就可以提交登录
  46. nickName(newVal) {
  47. if (newVal) {
  48. this.disabled = false
  49. }
  50. }
  51. },
  52. methods: {
  53. // 选择头像事件
  54. async onChooseAvatar(e) {
  55. const {
  56. avatarUrl
  57. } = e.detail
  58. // do something
  59. // 我这边是把文件上传到云服务器
  60. this.avatarUrl = await this.uploadFiles(avatarUrl, 'avatar')
  61. },
  62. // 上传头像图片到云服务器
  63. async uploadFiles(filePath, cloudPath) {
  64. const res = await uniCloud.uploadFile({
  65. cloudPath: cloudPath,
  66. filePath: filePath
  67. })
  68. // 上传成功后将图片路径返回出去
  69. return res.fileID
  70. },
  71. // 昵称输入事件
  72. inputName(e) {
  73. const {
  74. value
  75. } = e.detail
  76. // do something
  77. },
  78. // 关闭按钮点击事件
  79. close() {
  80. this.$emit('update:isVisible', false)
  81. },
  82. // 登录按钮点击事件
  83. submit() {
  84. const userInfo = {
  85. avatarUrl: this.avatarUrl,
  86. nickName: this.nickName
  87. }
  88. this.$emit('submit', userInfo)
  89. }
  90. }
  91. }
  92. </script>
  93. <style lang="scss">
  94. view {
  95. box-sizing: border-box;
  96. }
  97. .container {
  98. width: 100%;
  99. height: 45%;
  100. position: absolute;
  101. left: 0;
  102. bottom: 0;
  103. padding: 0 20px;
  104. box-sizing: border-box;
  105. display: flex;
  106. flex-direction: column;
  107. background-color: #fff;
  108. border-top-left-radius: 10px;
  109. border-top-right-radius: 10px;
  110. .title {
  111. width: 100%;
  112. height: 30%;
  113. font-size: 20px;
  114. font-weight: bold;
  115. padding-top: 20px;
  116. text:nth-child(2) {
  117. display: block;
  118. font-size: 14px;
  119. font-weight: normal;
  120. margin-top: 5px;
  121. }
  122. }
  123. .choose-avatar-row,
  124. .choose-nickname-row {
  125. width: 100%;
  126. height: 20%;
  127. display: flex;
  128. justify-content: flex-start;
  129. align-items: center;
  130. padding: 10px 2px;
  131. font-size: 14px;
  132. border-top: 1px solid #ccc;
  133. border-bottom: 1px solid #ccc;
  134. .avatar-wrapper {
  135. width: 40px;
  136. height: 40px;
  137. margin: 0;
  138. padding: 0;
  139. margin-right: 10px;
  140. .avatar {
  141. width: 100%;
  142. height: 100%;
  143. }
  144. }
  145. }
  146. .choose-nickname-row {
  147. border-top: none;
  148. text {
  149. width: 45px;
  150. margin-right: 10px;
  151. }
  152. }
  153. .login-row {
  154. width: 100%;
  155. height: 30%;
  156. padding-top: 20px;
  157. display: flex;
  158. button {
  159. font-size: 14px;
  160. width: 30%;
  161. height: 40px;
  162. display: flex;
  163. align-items: center;
  164. justify-content: center;
  165. border-color: transparent;
  166. color: #07c160;
  167. }
  168. .inactive {
  169. color: #ccc;
  170. }
  171. }
  172. }
  173. </style>

使用:

login.vue页面(记得导入组件,我这里用的是uniapp,有easycom所以没有手动导入)

  1. <!-- 微信登录之填写头像昵称信息 -->
  2. <wx-login-popup :isVisible.sync="isLoginPopupVisible" @submit="submit"></wx-login-popup>

需要传递控制弹框显示与隐藏的值,接收该组件的登录事件

  1. <script>
  2. export default {
  3. data() {
  4. return {
  5. isLoginPopupVisible: false,
  6. }
  7. },
  8. methods: {
  9. // 接收填写信息组件的登录事件
  10. submit(userInfo) {
  11. // 登录逻辑...
  12. }
  13. }
  14. }
  15. </script>

效果如下:

 

 

 

其中还要注意一点,获取昵称在微信开发者工具中运行时是空值,但是在真机中测试是正常能获取到微信昵称的,可能跟我没有做内容安全检测有关,如果友友们有兴趣可以去官网了解一下~

另外:弹出框样式借鉴的是这个博主的帖子

https://blog.csdn.net/qq_45737678/article/details/127898614?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166921385016782388079221%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166921385016782388079221&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-127898614-null-null.142^v66^control,201^v3^control_1,213^v2^t3_esquery_v2&utm_term=%E5%A4%B4%E5%83%8F%E6%98%B5%E7%A7%B0%E5%A1%AB%E5%86%99%E8%83%BD%E5%8A%9B&spm=1018.2226.3001.4187

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/616068
推荐阅读
相关标签
  

闽ICP备14008679号