微信小程序授权及检测访问当前页面需要去登录的操作
作者:互联网
1、小程序授权登录
这里我直接复制代码:
login.js
const app = getApp() Page({ data: { //判断小程序的API,回调,参数,组件等是否在当前版本可用。 canIUse: wx.canIUse('button.open-type.getUserInfo'), userinfoObj: {} }, // 授权按钮 bindGetUserInfo: function (e) { wx.getUserProfile({ desc: '业务需要', lang: 'zh_CN', success: res1 => { // wx.setStorageSync('nickName', res1.userInfo.nickName) // 授权缓存用户昵称 // wx.setStorageSync('avatarUrl', res1.userInfo.avatarUrl) // 授权缓存用户头像 this.setData({ userinfoObj: { ...this.data.userinfoObj, nickName: res1.userInfo.nickName, avatarUrl: res1.userInfo.avatarUrl } }) wx.login({ success: res => { this.getUserOpenId(res.code) } }); }, fail: function () { wx.showModal({ title: '提示', content: '您拒绝了授权,无法正常使用小程序 重新授权', showCancel: false, confirmText: '重新授权', success: function (res) { if (res.confirm) { console.log('用户点击了"重新授权"') } } }) } }) }, // 通过code获取openid getUserOpenId(code) { let postData = { code, appid: app.globalData.appid, parentUserid: wx.getStorageSync('parentUserid') || '' } app.requestData('xxx', { ...postData }).then((res) => { if (res.result === 'success') { // wx.setStorageSync('sessionKey', res.data.sessionKey) // 缓存sessionKey wx.setStorageSync('openid', res.data.wxId) // 缓存openid this.setData({ userinfoObj: { ...this.data.userinfoObj, openid: res.data.wxId } }) console.log('wxId', res.data.wxId) this.insertUserInfo() } else { app.showTip(res.msg) } }) }, // 将 openid 头像、昵称 入库 insertUserInfo() { app.requestData('xxx', { nickName: this.data.userinfoObj.nickName, openid: this.data.userinfoObj.openid, avatarUrl: this.data.userinfoObj.avatarUrl, parentUserid: wx.getStorageSync('parentUserid') || '' }).then((res) => { if (res.result === 'success') { var value = wx.getStorageSync('urlWithArgs') app.checkIslogin(function () { if (value !== '') { wx.redirectTo({ url: value, }) } else { wx.switchTab({ url: '../mine/index', }) } }) } else { app.showTip(res.msg) } }) }, // 通过openid获取手机号 updateWinxinUserMobile() {}, // onl oad() { // wx.showModal({ // title: '提示', // content: wx.getStorageSync('parentUserid'), // success (res) { // if (res.confirm) { // console.log('用户点击确定') // } else if (res.cancel) { // console.log('用户点击取消') // } // } // }) // } })
login.xml
<!--pages/login/index.wxml--> <view wx:if="{{canIUse}}"> <view class='header'> <image src='../../image/logo.jpg'></image> </view> <view class='content'> <view>申请获取以下权限</view> <text>获得你的公开信息(昵称,头像等)</text> </view> <button class='bottom' type='primary' bindtap="bindGetUserInfo"> 微信一键登录 </button> </view> <view wx:else>请升级微信版本</view>
2、众所周知,小程序进去之后不能立马弹出授权页面,要让用户可以浏览部分页面,这里就要监测用户是否有授权了
可以在app.js里写一个全局的函数
onLaunch() { this.checkIslogin() }, // 检测用户是否已经授权登录过, 登录过就获取用户信息 checkIslogin(callback) { const openid = wx.getStorageSync('openid') const _this = this if (!openid) { this.globalData.isLogin = false } else { this.globalData.isLogin = true this.requestData('xxx', { openid: openid, parentUserid: wx.getStorageSync('parentUserid') || '' }).then((response) => { if (response.result === 'success') { _this.globalData.userInfo = response.data console.log(response.data) // if (!response.data.nickName) { // _this.globalData.isLogin = false // } typeof callback == 'function' && callback() } else { _this.showTip(response.msg) } }) } },
我这里是定义了一个全局变量 isLogin
在需要授权的页面写入
onl oad() { if (!app.globalData.isLogin) { wx.navigateTo({ url: '/pages/login/index', }) } else { //this.queryuserdetail() // 用户详情 //this.queryCount() // 用户计数 } },
标签:openid,登录,微信,app,res,授权,页面,data,wx 来源: https://www.cnblogs.com/yxg2852/p/16281923.html