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


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中遭遇级联表达式陷阱
Mar 08 Javascript
JQuery this 和 $(this) 的区别
Aug 23 Javascript
JavaScript Event学习第二章 Event浏览器兼容性
Feb 07 Javascript
Javascript中获取出错代码所在文件及行数的代码
Sep 23 Javascript
JS 表单验证大全
Nov 23 Javascript
jQuery实现id模糊查询的小例子
Mar 19 Javascript
JavaScript按位运算符的应用简析
Feb 04 Javascript
checkbox选中与未选中判断示例
Aug 04 Javascript
js实现二代身份证号码验证详解
Nov 20 Javascript
js实现点击获取验证码倒计时效果
Jan 28 Javascript
第二篇Bootstrap起步
Jun 21 Javascript
关于动态执行代码(js的Eval)实例详解
Aug 15 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中=赋值操作符对不同数据类型的不同行为
2011/01/02 PHP
在Laravel框架里实现发送邮件实例(邮箱验证)
2016/05/20 PHP
CI框架(ajax分页,全选,反选,不选,批量删除)完整代码详解
2016/11/01 PHP
PHP对象的浅复制与深复制的实例详解
2017/10/26 PHP
php xhprof使用实例详解
2019/04/15 PHP
DIV外区域Click后关闭DIV的实现代码
2011/12/21 Javascript
js实现的map方法示例代码
2014/01/13 Javascript
JS在IE下缺少标识符的错误
2014/07/23 Javascript
javascript和jquery实现设置和移除文本框默认值效果代码
2015/01/13 Javascript
无缝滚动的简单实现代码(推荐)
2016/06/07 Javascript
Bootstrap框架结合jQuery仿百度换肤功能实例解析
2016/09/17 Javascript
JavaScript 实现的checkbox经典实例分享
2016/10/16 Javascript
React入门教程之Hello World以及环境搭建详解
2017/07/11 Javascript
vue多页面开发和打包正确处理方法
2018/04/20 Javascript
node.js ws模块搭建websocket服务端的方法示例
2019/04/25 Javascript
NProgress显示顶部进度条效果及使用详解
2019/09/21 Javascript
详解vue或uni-app的跨域问题解决方案
2020/02/21 Javascript
[09:13]DOTA2-DPC中国联赛 正赛 Ehome vs Magma 选手采访 1月19日
2021/03/11 DOTA
数据挖掘之Apriori算法详解和Python实现代码分享
2014/11/07 Python
Python连接mysql数据库的正确姿势
2016/02/03 Python
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
2017/08/31 Python
python 循环读取txt文档 并转换成csv的方法
2018/10/26 Python
Python使用itchat 功能分析微信好友性别和位置
2019/08/05 Python
Django框架models使用group by详解
2020/03/11 Python
django使用JWT保存用户登录信息
2020/04/22 Python
利用python实现汉诺塔游戏
2021/03/01 Python
Expedia印度:您的一站式在线旅游网站
2017/08/24 全球购物
西班牙拥有最佳品牌的动物商店:Animalear.com
2018/01/05 全球购物
《跟踪台风的卫星》教学反思
2014/04/10 职场文书
酒店仓管员岗位职责
2014/04/28 职场文书
暑假安全教育广播稿
2014/09/10 职场文书
教师节作文之小学四年级
2019/09/03 职场文书
Python编程根据字典列表相同键的值进行合并
2021/10/05 Python
关于SpringBoot 使用 Redis 分布式锁解决并发问题
2021/11/17 Redis
python数据处理之Pandas类型转换
2022/04/28 Python
Java实现简单小画板
2022/06/10 Java/Android