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


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 相关文章推荐
共享自己写一个框架DreamScript
Jan 20 Javascript
jquery 插件 web2.0分格的分页脚本,可用于ajax无刷新分页
Dec 25 Javascript
利用js读取动态网站从服务器端返回的数据
Feb 10 Javascript
jQuery插件实现无缝滚动特效
Nov 24 Javascript
JS禁用页面上所有控件的实现方法(附demo源码下载)
Dec 17 Javascript
利用HTML5+Socket.io实现摇一摇控制PC端歌曲切换
Jan 13 Javascript
node+vue实现用户注册和头像上传的实例代码
Jul 20 Javascript
js运算符的一些特殊用法
Jul 29 Javascript
vue地址栏直接输入路由无效问题的解决
Nov 15 Javascript
javascript中如何判断类型汇总
May 14 Javascript
微信小程序scroll-view的滚动条设置实现
Mar 02 Javascript
Vue监视数据的原理详解
Feb 24 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
php 生成WML页面方法详解
2009/08/09 PHP
通达OA公共代码 php常用检测函数
2011/12/14 PHP
学习使用curl采集curl使用方法
2012/01/11 PHP
Php中文件下载功能实现超详细流程分析
2012/06/13 PHP
discuz免激活同步登入代码修改方法(discuz同步登录)
2013/12/24 PHP
PHP类继承 extends使用介绍
2014/01/14 PHP
PHP使用Alexa API获取网站的Alexa排名例子
2014/06/12 PHP
ThinkPHP3.1新特性之Action参数绑定
2014/06/19 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
2019/03/01 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
2019/10/13 PHP
收集的10个免费的jQuery相册
2011/02/26 Javascript
javascript的parseFloat()方法精度问题探讨
2013/11/26 Javascript
jQuery实现的一个自定义Placeholder属性插件
2014/08/11 Javascript
jquery实现html页面 div 假分页有原理有代码
2014/09/06 Javascript
jquery.gridrotator实现响应式图片展示画廊效果
2015/06/23 Javascript
js变量提升深入理解
2016/09/16 Javascript
Vue.js组件使用开发实例教程
2016/11/01 Javascript
jQuery实现弹幕效果
2017/02/17 Javascript
node.js程序作为服务并在windows下开机自启动(用forever)
2017/03/29 Javascript
element-ui的回调函数Events的用法详解
2018/10/16 Javascript
基于Fixed定位的框选功能的实现代码
2019/05/13 Javascript
js构造函数constructor和原型prototype原理与用法实例分析
2020/03/02 Javascript
如何手动实现一个 JavaScript 模块执行器
2020/10/16 Javascript
使用Python来开发微信功能
2018/06/13 Python
Python os.rename() 重命名目录和文件的示例
2018/10/25 Python
根据tensor的名字获取变量的值方式
2020/01/04 Python
使用opencv中匹配点对的坐标提取方式
2020/06/04 Python
高清屏下canvas重置尺寸引发的问题的解决
2019/10/14 HTML / CSS
中软Java笔试题
2012/11/11 面试题
JAVA程序设计笔试题面试题一套
2015/07/28 面试题
实习医生自我评价
2013/09/22 职场文书
宿舍违规检讨书
2014/01/12 职场文书
县级文明单位申报材料
2014/05/23 职场文书
电气自动化求职信
2014/06/24 职场文书
公司人事任命通知
2015/04/20 职场文书
使用CSS实现六边形的图片效果
2022/08/05 HTML / CSS