详解使用uni-app开发微信小程序之登录模块

作者:WFaceBoss 时间:2024-05-11 09:15:57 

从微信小程序官方发布的公告中我们可获知:小程序体验版、开发版调用 wx.getUserInfo 接口,将无法弹出授权询问框,默认调用失败,需使用 <button open-type="getUserInfo"></button> 引导用户主动进行授权操作:

1.当用户未授权过,调用该接口将直接报错

2.当用户授权过,可以使用该接口获取用户信息

但在实际开发中我们可能需要弹出授权询问框,因此需要我们自己来写模拟授权弹框(主要是对<buttonopen-type="getUserInfo"></button>的包裹+用户是否是第一次授权判断来显示该页面),代码如下:

1.页面结构


<template>
 <view>
   <!-- #ifdef MP-WEIXIN -->
   <view v-if="isCanUse">
     <view>
       <view class='header'>
         <image src='../../static/img/wx_login.png'></image>
       </view>
       <view class='content'>
         <view>申请获取以下权限</view>
         <text>获得你的公开信息(昵称,头像、地区等)</text>
       </view>

<button class='bottom' type='primary' open-type="getUserInfo" withCredentials="true" lang="zh_CN" @getuserinfo="wxGetUserInfo">
         授权登录
       </button>
     </view>
   </view>
   <!-- #endif -->
 </view>
</template>

这里的isCanUse是用来记录当前用户是否是第一次授权使用的,wx_login.png图在底部下载获取即可。

2.样式


<style>
 .header {
   margin: 90rpx 0 90rpx 50rpx;
   border-bottom: 1px solid #ccc;
   text-align: center;
   width: 650rpx;
   height: 300rpx;
   line-height: 450rpx;
 }

.header image {
   width: 200rpx;
   height: 200rpx;
 }

.content {
   margin-left: 50rpx;
   margin-bottom: 90rpx;
 }

.content text {
   display: block;
   color: #9d9d9d;
   margin-top: 40rpx;
 }

.bottom {
   border-radius: 80rpx;
   margin: 70rpx 50rpx;
   font-size: 35rpx;
 }
</style>

3.脚本部分


<script>
 export default {
   data() {
     return {
       SessionKey: '',
       OpenId: '',
       nickName: null,
       avatarUrl: null,
       isCanUse: uni.getStorageSync('isCanUse')||true//默认为true
     };
   },
   methods: {
     //第一授权获取用户信息===》按钮触发
     wxGetUserInfo() {
       let _this = this;
       uni.getUserInfo({
         provider: 'weixin',
         success: function(infoRes) {
           let nickName = infoRes.userInfo.nickName; //昵称
           let avatarUrl = infoRes.userInfo.avatarUrl; //头像
           try {
             uni.setStorageSync('isCanUse', false);//记录是否第一次授权 false:表示不是第一次授权
             _this.updateUserInfo();
           } catch (e) {}
         },
         fail(res) {}
       });
     },

//登录
       login() {
       let _this = this;
       uni.showLoading({
         title: '登录中...'
       });

// 1.wx获取登录用户code
       uni.login({
         provider: 'weixin',
         success: function(loginRes) {
           let code = loginRes.code;
           if (!_this.isCanUse) {
             //非第一次授权获取用户信息
             uni.getUserInfo({
               provider: 'weixin',
               success: function(infoRes) {
//获取用户信息后向调用信息更新方法
                 let nickName = infoRes.userInfo.nickName; //昵称
                 let avatarUrl = infoRes.userInfo.avatarUrl; //头像
                   _this.updateUserInfo();//调用更新信息方法
               }
             });
           }

//2.将用户登录code传递到后台置换用户SessionKey、OpenId等信息
           uni.request({
             url: '服务器地址',
             data: {
               code: code,
             },
             method: 'GET',
             header: {
               'content-type': 'application/json'
             },
             success: (res) => {
               //openId、或SessionKdy存储//隐藏loading
               uni.hideLoading();
             }
           });
         },
       });
     },
    //向后台更新信息
     updateUserInfo() {
       let _this = this;
       uni.request({
         url:'url' ,//服务器端地址
         data: {
           appKey: this.$store.state.appKey,
           customerId: _this.customerId,
           nickName: _this.nickName,
           headUrl: _this.avatarUrl
         },
         method: 'POST',
         header: {
           'content-type': 'application/json'
         },
         success: (res) => {
           if (res.data.state == "success") {
             uni.reLaunch({//信息更新成功后跳转到小程序首页
               url: '/pages/index/index'
             });
           }
         }

});
     }
   },
   onLoad() {//默认加载
     this.login();
   }
 }
</script>

4.最终效果如下:

详解使用uni-app开发微信小程序之登录模块 

详解使用uni-app开发微信小程序之登录模块

wx_login.png图:

详解使用uni-app开发微信小程序之登录模块

来源:https://www.cnblogs.com/wfaceboss/p/10472413.html

标签:uni-app,小程序,登录模块
0
投稿

猜你喜欢

  • 浅谈Python中文件夹和python package包的区别

    2021-03-23 21:57:26
  • 详细介绍查询优化技术在现实系统中的运用

    2009-01-04 13:34:00
  • ASP获取网页内容(解决乱码问题)

    2009-07-26 10:44:00
  • Python中实现输入超时及如何通过变量获取变量名

    2021-02-17 03:17:48
  • 一篇文章介绍redux、react-redux、redux-saga总结

    2023-08-22 16:56:32
  • mysql中json_extract的使用方法实例详解

    2024-01-19 04:28:04
  • python time模块时间戳 与 结构化时间详解

    2021-04-09 11:06:42
  • golang 中 channel 的详细使用、使用注意事项及死锁问题解析

    2024-04-26 17:26:45
  • asp数字或者字符排序函数代码

    2011-02-24 11:00:00
  • 利用Python找出删除自己微信的好友并将他们自动化删除

    2022-05-23 00:10:13
  • Python 代码实现各种酷炫功能

    2022-12-24 10:40:16
  • 教你如何编写Vue.js的单元测试的方法

    2024-04-26 17:38:09
  • Python+Tensorflow+CNN实现车牌识别的示例代码

    2021-06-30 08:44:05
  • Python程序中使用SQLAlchemy时出现乱码的解决方案

    2022-11-07 23:19:28
  • 如何修改Editplus让图片自适应界面大小

    2007-09-26 12:37:00
  • python监控进程状态,记录重启时间及进程号的实例

    2022-04-22 07:47:20
  • python中使用pyhook实现键盘监控的例子

    2023-08-17 10:21:52
  • mysql+mybatis下全文搜索的使用方法

    2024-01-21 22:07:09
  • Python中的MongoDB基本操作:连接、查询实例

    2021-12-21 07:38:06
  • numpy中实现ndarray数组返回符合特定条件的索引方法

    2023-04-21 06:21:53
  • asp之家 网络编程 m.aspxhome.com