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


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 相关文章推荐
关于JavaScript与HTML的交互事件
Apr 12 Javascript
JS+CSS实现Li列表隔行换色效果的方法
Feb 16 Javascript
javascript结合canvas实现图片旋转效果
May 03 Javascript
AngularJS 使用$sce控制代码安全检查
Jan 05 Javascript
jQuery实现指定区域外单击关闭指定层的方法【经典】
Jun 22 Javascript
js事件冒泡、事件捕获和阻止默认事件详解
Aug 04 Javascript
ES6新特性之模块Module用法详解
Apr 01 Javascript
vue脚手架中配置Sass的方法
Jan 04 Javascript
浅谈ajax请求不同页面的微信JSSDK问题
Feb 26 Javascript
Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案
May 15 Javascript
JS访问对象两种方式区别解析
Aug 29 Javascript
React 条件渲染最佳实践小结(7种)
Sep 27 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函数)
2006/10/09 PHP
ThinkPHP写第一个模块应用
2012/02/20 PHP
单一index.php实现PHP任意层级文件夹遍历(Zjmainstay原创)
2012/07/31 PHP
PHP使用pdo实现事务处理操作示例
2018/09/05 PHP
PHP单元测试框架PHPUnit用法详解
2019/01/23 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
jquery 年会抽奖程序
2011/12/22 Javascript
快速解决FusionCharts联动的中文乱码问题
2013/12/04 Javascript
drag-and-drop实现图片浏览器预览
2015/08/06 Javascript
浅析jQuery Mobile的初始化事件
2015/12/03 Javascript
vue组件实例解析
2017/01/10 Javascript
Javascript中的prototype与继承
2017/02/06 Javascript
浅谈jquery拼接字符串效率比较高的方法
2017/02/22 Javascript
详解vue.js 开发环境搭建最简单攻略
2017/06/12 Javascript
Webpack框架核心概念(知识点整理)
2017/12/22 Javascript
深入理解 webpack 文件打包机制(小结)
2018/01/08 Javascript
发布一款npm包帮助理解npm的使用
2019/01/03 Javascript
node微信开发之获取access_token+自定义菜单
2019/03/17 Javascript
详解vue项目打包步骤
2019/03/29 Javascript
vue2 中二级路由高亮问题及配置方法
2019/06/10 Javascript
手把手带你搭建一个node cli的方法示例
2020/08/07 Javascript
10款最好的Web开发的 Python 框架
2015/03/18 Python
Python切片知识解析
2016/03/06 Python
Python简单实现socket信息发送与监听功能示例
2018/01/03 Python
Python基于百度AI的文字识别的示例
2018/04/21 Python
对Tensorflow中的变量初始化函数详解
2018/07/27 Python
PyQt5 对图片进行缩放的实例
2019/06/18 Python
Numpy一维线性插值函数的用法
2020/04/22 Python
聊聊python在linux下与windows下导入模块的区别说明
2021/03/03 Python
英国最大的线上保健品零售商之一:Vitamin Planet
2016/12/01 全球购物
斯图尔特·韦茨曼鞋加拿大官网:Stuart Weitzman加拿大
2019/10/13 全球购物
学校联谊活动方案
2014/02/15 职场文书
2014年企业工会工作总结
2014/11/12 职场文书
交心谈心活动总结
2015/05/11 职场文书
深入理解python协程
2021/06/15 Python
js前端面试常见浏览器缓存强缓存及协商缓存实例
2022/06/21 Javascript