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

1、前言
css

因为微信官方修改了 getUserInfo 接口,因此如今没法实现一进入微信小程序就弹出受权窗口,只能经过 button 去触发。git

官方链接:https://developers.weixin.qq.com/community/develop/doc/0000a26e1aca6012e896a517556c01github

2、实现思路
json

本身写一个微信受权登陆页面让用户实现点击的功能,也就是实现了经过 button 组件去触发 getUserInof 接口。在用户进入微信小程序的时候,判断用户是否受权了,若是没有受权的话就显示受权页面,让用户去执行受权的操做。若是已经受权了,则直接跳过这个页面,进入首页。小程序

3、界面简介微信小程序

1.不带 tabBarapi

 

 

 

 

4、源码微信

1.index.wxmlsession

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

.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 下载

https://github.com/yyzheng1729/loginDemo

5、同类文章推荐

微信小程序之侧边栏滑动实现过程解析(附完整源码)

微信小程序之下拉列表实现方法解析(附完整源码)

以上就是本文的所有内容,但愿对你们的学习有所帮助,也但愿你们多多支持脚本之家。

  

 转自:https://www.jb51.net/article/168314.html

相关文章
相关标签/搜索