微信小程序实现授权登录


Posted in Javascript onMay 15, 2019

前言:由于微信官方修改了 getUserInfo 接口,所以现在无法实现一进入微信小程序就弹出授权窗口,只能通过 button 去触发。官方连接:点击打开链接

1.实现思路

自己写一个微信授权登录页面让用户实现点击的功能,也就是实现了通过 button 组件去触发 getUserInof 接口。在用户进入微信小程序的时候,判断用户是否授权了,如果没有授权的话就显示下面“界面简介”的第一个图,让用户去执行授权的操作。如果已经授权了,则直接跳过这个页面,进入首页。

2.界面简介

微信小程序实现授权登录微信小程序实现授权登录

3.源码

login.wxml

<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>

login.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;
}

login.json

{
 
"navigationBarTitleText": "授权登录"
 
}

login.js

代码的 wx.request 是我项目与后台的一些交互,可直接删除掉。

需要修改的地方:

记得自己补上 wx.switchTab 接口中的 url 属性,这是授权成功后跳转的页面路径,由于我的首页是 tarBar 页面,所以这里用wx.switchTab ,如果不是 tarBar 页面的话,可以用 wx.navigateTo 和 wx.redirecTo 去跳转

Page({
 data: {
  //判断小程序的API,回调,参数,组件等是否在当前版本可用。
  canIUse: wx.canIUse('button.open-type.getUserInfo')
 },
 onLoad: function () {
  var that = this;
  // 查看是否授权
  wx.getSetting({
   success: function (res) {
    if (res.authSetting['scope.userInfo']) {
     wx.getUserInfo({
      success: function (res) {
       //从数据库获取用户信息
       that.queryUsreInfo();
       //用户已经授权过
       wx.switchTab({
        url: ''
       })
      }
     });
    }
   }
  })
 },
 bindGetUserInfo: function (e) {
  if (e.detail.userInfo) {
   //用户按了允许授权按钮
   var that = this;
   //插入登录的用户的相关信息到数据库
   wx.request({
    url: getApp().globalData.urlPath + 'hstc_interface/insert_user',
    data: {
     openid: getApp().globalData.openid,
     nickName: e.detail.userInfo.nickName,
     avatarUrl: e.detail.userInfo.avatarUrl,
     province:e.detail.userInfo.province,
     city: e.detail.userInfo.city
    },
    header: {
     'content-type': 'application/json'
    },
    success: function (res) {
     //从数据库获取用户信息
     that.queryUsreInfo();
     console.log("插入小程序登录用户信息成功!");
    }
   });
   //授权成功后,跳转进入小程序首页
   wx.switchTab({
    url: '' 
   })
  } else {
   //用户按了拒绝按钮
   wx.showModal({
    title:'警告',
    content:'您点击了拒绝授权,将无法进入小程序,请授权之后再进入!!!',
    showCancel:false,
    confirmText:'返回授权',
    success:function(res){
     if (res.confirm) {
      console.log('用户点击了“返回授权”')
     } 
    }
   })
  }
 },
 //获取用户信息接口
 queryUsreInfo: function () {
  wx.request({
   url: getApp().globalData.urlPath + 'hstc_interface/queryByOpenid',
   data: {
    openid: getApp().globalData.openid
   },
   header: {
    'content-type': 'application/json'
   },
   success: function (res) {
    console.log(res.data);
    getApp().globalData.userInfo = res.data;
   }
  });
 },
 
})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript基本概念初级讲解论坛贴的学习记录
Feb 22 Javascript
js 点击按钮弹出另一页,选择值后,返回到当前页
May 26 Javascript
基于jQuery+HttpHandler实现图片裁剪效果代码(适用于论坛, SNS)
Sep 02 Javascript
Node.js中使用socket创建私聊和公聊聊天室
Nov 19 Javascript
总结十个Angular.js由浅入深的面试问题
Aug 26 Javascript
jQuery事件对象总结
Oct 17 Javascript
vue.js绑定class和style样式(6)
Dec 09 Javascript
详解百度百科目录导航树小插件
Jan 08 Javascript
js实现炫酷的左右轮播图
Jan 18 Javascript
Vue.js如何优雅的进行form validation
Apr 07 Javascript
JavaScript调用模式与this关键字绑定的关系
Apr 21 Javascript
addEventListener()和removeEventListener()追加事件和删除追加事件
Dec 04 Javascript
基于vue实现一个神奇的动态按钮效果
May 15 #Javascript
微信小程序导航栏跟随滑动效果的实现代码
May 14 #Javascript
详解VSCode配置启动Vue项目
May 14 #Javascript
微信小程序下拉菜单效果的实例代码
May 14 #Javascript
jquery+css实现Tab栏切换的代码实例
May 14 #jQuery
jquery实现二级导航下拉菜单效果实例
May 14 #jQuery
js纯前端实现腾讯cos文件上传功能的示例代码
May 14 #Javascript
You might like
php桌面中心(二) 数据库写入
2007/03/11 PHP
两个开源的Php输出Excel文件类
2010/02/08 PHP
用php制作简单分页(从数据库读取记录)的方法详解
2013/05/04 PHP
深入PHP数据缓存的使用说明
2013/05/10 PHP
weiphp微信公众平台授权设置
2016/01/04 PHP
PHP7扩展开发教程之Hello World实现方法示例
2017/08/03 PHP
Laravel 6 将新增为指定队列任务设置中间件的功能
2019/08/06 PHP
javascript各种复制代码收集
2008/09/20 Javascript
一个简单的JavaScript 日期计算算法
2009/09/11 Javascript
JavaScript Math 对象常用方法总结
2016/04/28 Javascript
js中最容易被忽视的事件问题大总结
2016/05/15 Javascript
新入门node.js必须要知道的概念(必看篇)
2016/08/10 Javascript
jQuery实现ToolTip元素定位显示功能示例
2016/11/23 Javascript
jQuery实现文字自动横移
2017/01/08 Javascript
layerUI下的绑定事件实例代码
2018/08/17 Javascript
vue组件之间通信方式实例总结【8种方式】
2019/02/22 Javascript
微信小程序实用代码段(收藏版)
2019/12/17 Javascript
CentOS 8.2服务器上安装最新版Node.js的方法
2020/12/16 Javascript
基于javascript实现移动端轮播图效果
2020/12/21 Javascript
Python基类函数的重载与调用实例分析
2015/01/12 Python
python使用in操作符时元组和数组的区别分析
2015/05/19 Python
Python实现HTTP协议下的文件下载方法总结
2016/04/20 Python
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
2017/03/19 Python
使用Django搭建网站实现商品分页功能
2020/05/22 Python
使用Python爬取Json数据的示例代码
2020/12/07 Python
中国包裹转运寄送国际服务:Famiboat
2019/07/24 全球购物
小车司机岗位职责
2013/11/25 职场文书
《灯光》教学反思
2014/02/08 职场文书
升职演讲稿范文
2014/05/23 职场文书
应届生找工作求职信
2014/06/24 职场文书
法定代表人身份证明书(含说明)
2014/10/02 职场文书
死亡证明书样本说明
2014/10/18 职场文书
儿园租房协议书范本
2014/12/02 职场文书
导游词之南昌滕王阁
2019/11/29 职场文书
详细聊聊vue中组件的props属性
2021/11/02 Vue.js
JavaScript 中for/of,for/in 的详细介绍
2021/11/17 Javascript