微信小程序 授权登录详解(附完整源码)


Posted in Javascript onAugust 23, 2019

一、前言

由于微信官方修改了 getUserInfo 接口,所以现在无法实现一进入微信小程序就弹出授权窗口,只能通过 button 去触发。

官方连接:https://developers.weixin.qq.com/community/develop/doc/0000a26e1aca6012e896a517556c01

二、实现思路

自己写一个微信授权登录页面让用户实现点击的功能,也就是实现了通过 button 组件去触发 getUserInof 接口。在用户进入微信小程序的时候,判断用户是否授权了,如果没有授权的话就显示授权页面,让用户去执行授权的操作。如果已经授权了,则直接跳过这个页面,进入首页。

三、界面简介

1.不带 tabBar

微信小程序 授权登录详解(附完整源码)

2.带 tabBar

微信小程序 授权登录详解(附完整源码)

四、源码

1.index.wxml

<view wx:if="{{isHide}}">
 <view wx:if="{{canIUse}}" >
  <view class='header'>
   <image src='/images/wx_login.png'></image>
  </view>
 
  <view class='content'>
   <view>申请获取以下权限</view>
   <text>获得你的公开信息(昵称,头像等)</text>
  </view>
 
  <button class='bottom' type='primary' open-type="getUserInfo" lang="zh_CN" bindgetuserinfo="bindGetUserInfo">
   授权登录
  </button>
 </view>
 <view wx:else>请升级微信版本</view>
</view>
 
<view wx:else>
 <view>我的首页内容</view>
</view>

2.index.wcss

.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;
}

3.index.js

Page({
 data: {
  //判断小程序的API,回调,参数,组件等是否在当前版本可用。
  canIUse: wx.canIUse('button.open-type.getUserInfo'),
  isHide: false
 },
 
 onLoad: function() {
  var that = this;
  // 查看是否授权
  wx.getSetting({
   success: function(res) {
    if (res.authSetting['scope.userInfo']) {
     wx.getUserInfo({
      success: function(res) {
       // 用户已经授权过,不需要显示授权页面,所以不需要改变 isHide 的值
       // 根据自己的需求有其他操作再补充
       // 我这里实现的是在用户授权成功后,调用微信的 wx.login 接口,从而获取code
       wx.login({
        success: res => {
         // 获取到用户的 code 之后:res.code
         console.log("用户的code:" + res.code);
         // 可以传给后台,再经过解析获取用户的 openid
         // 或者可以直接使用微信的提供的接口直接获取 openid ,方法如下:
         // wx.request({
         //  // 自行补上自己的 APPID 和 SECRET
         //  url: 'https://api.weixin.qq.com/sns/jscode2session?appid=自己的APPID&secret=自己的SECRET&js_code=' + res.code + '&grant_type=authorization_code',
         //  success: res => {
         //   // 获取到用户的 openid
         //   console.log("用户的openid:" + res.data.openid);
         //  }
         // });
        }
       });
      }
     });
    } else {
     // 用户没有授权
     // 改变 isHide 的值,显示授权页面
     that.setData({
      isHide: true
     });
    }
   }
  });
 },
 
 bindGetUserInfo: function(e) {
  if (e.detail.userInfo) {
   //用户按了允许授权按钮
   var that = this;
   // 获取到用户的信息了,打印到控制台上看下
   console.log("用户的信息如下:");
   console.log(e.detail.userInfo);
   //授权成功后,通过改变 isHide 的值,让实现页面显示出来,把授权页面隐藏起来
   that.setData({
    isHide: false
   });
  } else {
   //用户按了拒绝按钮
   wx.showModal({
    title: '警告',
    content: '您点击了拒绝授权,将无法进入小程序,请授权之后再进入!!!',
    showCancel: false,
    confirmText: '返回授权',
    success: function(res) {
     // 用户没有授权成功,不需要改变 isHide 的值
     if (res.confirm) {
      console.log('用户点击了“返回授权”');
     }
    }
   });
  }
 }
})

关于 TabBar 的处理,只需要把上面写好的页面设置到 app.json 里面即可。

4.github 下载

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js数组中如何随机取出一个值
Jun 13 Javascript
Node.js实现的简易网页抓取功能示例
Dec 05 Javascript
浅谈document.write()输出样式
May 07 Javascript
深入理解js函数的作用域与this指向
May 28 Javascript
浅谈JavaScript函数的四种存在形态
Jun 08 Javascript
plupload+artdialog实现多平台上传文件
Jul 19 Javascript
js简单时间比较的方法
Aug 02 Javascript
node.js的exports、module.exports与ES6的export、export default深入详解
Oct 26 Javascript
详解plotly.js 绘图库入门使用教程
Feb 23 Javascript
微信小程序提取公用函数到util.js及使用方法示例
Jan 10 Javascript
JavaScript设计模式之命令模式实例分析
Jan 16 Javascript
浅谈vue 二级路由嵌套和二级路由高亮问题
Aug 06 Javascript
vue使用微信JS-SDK实现分享功能
Aug 23 #Javascript
VUE实现移动端列表筛选功能
Aug 23 #Javascript
简述ES6新增关键字let与var的区别
Aug 23 #Javascript
微信小程序后台持续定位功能使用详解
Aug 23 #Javascript
详解基于Vue/React项目的移动端适配方案
Aug 23 #Javascript
详解vue-video-player使用心得(兼容m3u8)
Aug 23 #Javascript
使用vue实现多规格选择实例(SKU)
Aug 23 #Javascript
You might like
PHP+JS+rsa数据加密传输实现代码
2011/03/23 PHP
php处理json格式数据经典案例总结
2016/05/19 PHP
JavaScript中创建类/对象的几种方法总结
2013/11/29 Javascript
js控制鼠标事件移动及移出效果显示
2014/10/19 Javascript
nodejs教程之制作一个简单的文章发布系统
2014/11/21 NodeJs
Javascript实现通过选择周数显示开始日和结束日的实现代码
2016/05/30 Javascript
利用Node.js制作爬取大众点评的爬虫
2016/09/22 Javascript
JS实现一个简单的日历
2017/02/22 Javascript
WebSocket实现简单客服聊天系统
2017/05/12 Javascript
Vue2.0用 watch 观察 prop 变化(不触发)
2017/09/08 Javascript
angularjs使用gulp-uglify压缩后执行报错的解决方法
2018/03/07 Javascript
微信小程序开发(三):返回上一级页面并刷新操作示例【页面栈】
2020/06/01 Javascript
详解vite2.0配置学习(typescript版本)
2021/02/25 Javascript
[08:44]DOTA2发布会群星聚首 我们都是刀塔人
2014/03/21 DOTA
使用python的chardet库获得文件编码并修改编码
2014/01/22 Python
在Python的web框架中配置app的教程
2015/04/30 Python
python编写微信远程控制电脑的程序
2018/01/05 Python
Python基于递归算法求最小公倍数和最大公约数示例
2018/07/27 Python
Python with用法:自动关闭文件进程
2019/07/10 Python
python PyAutoGUI 模拟鼠标键盘操作和截屏功能
2019/08/04 Python
使用TensorFlow对图像进行随机旋转的实现示例
2020/01/20 Python
Python %r和%s区别代码实例解析
2020/04/03 Python
Python opencv相机标定实现原理及步骤详解
2020/04/09 Python
Python devel安装失败问题解决方案
2020/06/09 Python
Python自动登录QQ的实现示例
2020/08/28 Python
举例讲解Python装饰器
2020/12/24 Python
html5在移动端的屏幕适应问题示例探讨
2014/06/15 HTML / CSS
StringBuilder和String的区别
2015/05/18 面试题
公路绿化方案
2014/05/12 职场文书
入职担保书范文
2014/05/21 职场文书
汉语言文学专业自荐信
2014/06/11 职场文书
2015年公司保安年终工作总结
2015/05/14 职场文书
辣妈辣妹观后感
2015/06/10 职场文书
护理专业毕业自我鉴定
2019/08/12 职场文书
Python关于OS文件目录处理的实例分享
2021/05/23 Python
openGauss数据库JDBC环境连接配置的详细过程(Eclipse)
2022/06/01 Java/Android