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


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 相关文章推荐
19个很有用的 JavaScript库推荐
Jun 27 Javascript
JavaScript插入动态样式实现代码
Feb 22 Javascript
Javascript获取窗口(容器)的大小及位置参数列举及简要说明
Dec 09 Javascript
jquery取消选择select下拉框示例代码
Feb 22 Javascript
js数组与字符串的相互转换方法
Jul 09 Javascript
jquery中push()的用法(数组添加元素)
Nov 25 Javascript
js实现简单折叠、展开菜单的方法
Aug 28 Javascript
关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
Jun 30 Javascript
jQuery手风琴的简单制作
May 12 jQuery
JavaScript数据结构之单链表和循环链表
Nov 28 Javascript
express+mockjs实现模拟后台数据发送功能
Jan 07 Javascript
解决使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js问题
Aug 30 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+javascript实现二级级联菜单的制作
2008/05/06 PHP
基于PHP magic_quotes_gpc的使用方法详解
2013/06/24 PHP
浅谈Eclipse PDT调试PHP程序
2014/06/09 PHP
php版微信公众平台回复中文出现乱码问题的解决方法
2016/09/22 PHP
Yii2.0框架实现带分页的多条件搜索功能示例
2019/02/20 PHP
JavaScript中的apply()方法和call()方法使用介绍
2012/07/25 Javascript
js操作iframe的一些方法介绍
2013/06/25 Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
2020/09/12 Javascript
javascript基本语法
2016/05/31 Javascript
vue.js入门教程之计算属性
2016/09/01 Javascript
Angular2数据绑定详解
2017/04/18 Javascript
微信小程序图片轮播组件gallery slider使用方法详解
2018/01/31 Javascript
javaScript强制保留两位小数的输入数校验和小数保留问题
2018/05/09 Javascript
浅析vue.js数组的变异方法
2018/06/30 Javascript
Vue2.5学习笔记之如何在项目中使用和配置Vue
2018/09/26 Javascript
详解微信小程序实现仿微信聊天界面(各种细节处理)
2019/02/17 Javascript
bootstrap table.js动态填充单元格数据的多种方法
2019/07/18 Javascript
Vue项目结合Vue-layer实现弹框式编辑功能(实例代码)
2020/03/11 Javascript
小程序实现背景音乐播放和暂停
2020/06/19 Javascript
[01:31:03]DOTA2完美盛典全回顾 见证十五项大奖花落谁家
2017/11/28 DOTA
python 文件操作api(文件操作函数)
2016/08/28 Python
Python实现按当前日期(年、月、日)创建多级目录的方法
2018/04/26 Python
python实现简易动态时钟
2018/11/19 Python
wxPython之wx.DC绘制形状
2019/11/19 Python
详解Python中namedtuple的使用
2020/04/27 Python
jenkins+python自动化测试持续集成教程
2020/05/12 Python
canvas画布实现手写签名效果的示例代码
2019/04/23 HTML / CSS
HEMA英国:荷兰原创设计
2018/08/28 全球购物
物流毕业生个人的自我评价
2014/02/13 职场文书
今冬明春火灾防控工作方案
2014/05/29 职场文书
大学新闻系自荐书
2014/05/31 职场文书
2014幼儿园班主任工作总结
2014/12/04 职场文书
2015迎新晚会开场白
2015/07/17 职场文书
2016年少先队活动总结
2016/04/06 职场文书
八年级作文之感悟亲情
2019/11/20 职场文书
MySQL中的引号和反引号的区别与用法详解
2021/10/24 MySQL