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


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性能陷阱小结(附实例说明)
Dec 28 Javascript
再论Javascript下字符串连接的性能
Mar 05 Javascript
基于jquery实现左右按钮点击的图片切换效果
Jan 27 Javascript
第五章之BootStrap 栅格系统
Apr 25 Javascript
关于input全选反选恶心的异常情况
Jul 24 Javascript
javaScript 逻辑运算符使用技巧整理
May 03 Javascript
使用 vue-i18n 切换中英文效果
May 23 Javascript
vue使用代理解决请求跨域问题详解
Jul 24 Javascript
Vue实现滑动拼图验证码功能
Sep 15 Javascript
vue实现拖拽效果
Dec 23 Javascript
用云开发Cloudbase实现小程序多图片内容安全监测的代码详解
Jun 07 Javascript
vue+echarts实现多条折线图
Mar 21 Vue.js
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
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
2016/08/17 PHP
javascript 冒号 使用说明
2009/06/06 Javascript
Mootools 1.2教程 选项卡效果(Tabs)
2009/09/15 Javascript
Javascript 解疑
2009/11/11 Javascript
Ext 今日学习总结
2010/09/19 Javascript
jQuery powerFloat万能浮动层下拉层插件使用介绍
2010/12/27 Javascript
javascript打印大全(打印页面设置/打印预览代码)
2013/03/29 Javascript
js动态添加删除,后台取数据(示例代码)
2013/11/25 Javascript
基于vuejs+webpack的日期选择插件
2020/05/21 Javascript
js 模仿锚点定位的实现方法
2016/11/19 Javascript
vue监听scroll的坑的解决方法
2017/09/07 Javascript
实战node静态文件服务器的示例代码
2018/03/08 Javascript
javascript实现考勤日历功能
2018/11/29 Javascript
layer.open提交子页面的form和layedit文本编辑内容的方法
2019/09/27 Javascript
[01:09:13]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第三场 1月19日
2021/03/11 DOTA
Python实现二维数组输出为图片
2018/04/03 Python
浅谈Python 多进程默认不能共享全局变量的问题
2019/01/11 Python
基于OpenCV python3实现证件照换背景的方法
2019/03/22 Python
python实现的读取网页并分词功能示例
2019/10/29 Python
推荐8款常用的Python GUI图形界面开发框架
2020/02/23 Python
python/golang实现循环链表的示例代码
2020/09/14 Python
Python爬虫+Tkinter制作一个翻译软件的示例
2021/02/20 Python
CSS3的颜色渐变效果的示例代码
2017/09/29 HTML / CSS
英国珠宝钟表和家居礼品精品店:David Shuttle
2018/02/24 全球购物
美国滑雪板和装备购物网站:Skis.com
2018/12/20 全球购物
Laura Geller官网:美国彩妆品牌
2018/12/29 全球购物
草莓网中国:StrawberryNet中国
2020/08/17 全球购物
介绍一下Cookie和Session及他们之间的区别
2012/11/20 面试题
PHP如何设置和取得Cookie值
2015/06/30 面试题
工商学院毕业生自荐信
2013/11/12 职场文书
英语专业学生个人求职信
2014/01/28 职场文书
保险公司晨会主持词
2014/03/22 职场文书
邻里守望志愿服务活动方案
2014/08/15 职场文书
餐厅如何利用“营销策略”扭转亏本局面
2019/10/15 职场文书
Python制作表白爱心合集
2022/01/22 Python
优化Mysql查询的示例
2022/04/26 MySQL