使用wepy 小程式授權點選取消授權失敗的方案
阿新 • • 發佈:2018-12-28
在wepy裡使用進行小程式頁面授權,裡面包含了使用者點選取消的重新授權方案:
//auth.js /* * @Author: Porco_Mar * @Date: 2018-04-11 15:49:55 * @Last Modified by: Porco_Mar * @Last Modified time: 2018-04-18 10:43:36 */ import wepy from 'wepy' export const _timer = (context) => { return new Promise((resolve, reject) => { let _timer = null; clearInterval(_timer); _timer = setInterval(() =>{ resolve(author(context)) },500) context.data.timer = _timer; }) } export const author = (context) => { return new Promise((resolve,reject) => { var that = context; wepy.getUserInfo({ success: (res) =>{ var userInfo = res.userInfo; that.data.userInfo = userInfo; resolve(res.userInfo) }, fail: (res) =>{ console.log('.......getUserInfo fail.........') clearInterval(context.data.timer) wepy.showModal({ title: '警告', content: '您點選了拒絕授權,將無法正常顯示個人資訊,點選確定重新獲取授權。', success:function(res){ if (res.confirm) { wepy.openSetting({ success: (res) => { if (res.authSetting["scope.userInfo"] || res.authSetting["scope.userLocation"]){////如果使用者重新同意了授權登入 wepy.getUserInfo({ success:function(res){ resolve(res.userInfo) that.$parent.globalData.userInfo = res.userInfo; } }) } },fail: function(res){ resolve({'avatarUrl':'','nickName':'翠花'}) console.log('沒有選擇授權') } }) }else{ console.log('還是不同意授權') } } }) }, complete: function (res){ } }) }) } let isBoolen = true; export const location = (context) => { return new Promise((resolve, reject) => { if(context.$parent.globalData.location != null){ resolve(context.$parent.globalData.location) console.log('已獲取location') }else{ console.log('沒有獲取到location ') wepy.getSetting({ success(res) { console.log(res) if(!res.authSetting['scope.userLocation']) { wx.showModal({ title: '溫馨提醒', content: '需要獲取您的地理位置才能使用小程式', cancelText: '不使用', confirmText: '獲取位置', success: function(res) { if(res.confirm) { getLocation(context).then((res) => { // console.log(res) if (res.code == 1){ if(isBoolen){ //第一次不執行 isBoolen = false; }else{ wepy.openSetting({ // 點選自帶取消定位健會呼叫這個面板 success: (res) => { if (res.authSetting["scope.userLocation"]){////如果使用者在面板重新同意了授權地理位置 console.log('--有了scope.userLocation--') resolve(getLocation(context)) //點選面板後再次呼叫getLocation返回引數 } },fail: function(res){ console.log('--沒有scope.userLocation--') } }) } }else{ resolve(getLocation(context)) } }) } else if(res.cancel) { //resolve(getLocation(context)) //不做任何操作 } } }) } } }) } }) } export const getLocation = (context) => { return new Promise((resolve, reject) => { wx.getLocation({ type: 'wgs84', success: function(res) { var latitude = res.latitude var longitude = res.longitude var speed = res.speed var accuracy = res.accuracy context.$parent.globalData.location = {'code': 0, 'latitude':latitude, 'longitude':longitude, 'speed':speed, 'accuracy':accuracy} resolve(context.$parent.globalData.location) }, fail: function(res){ resolve({'code': 1, 'latitude':'', 'longitude':'', 'speed':'', 'accuracy':''}) } }) }) } // index.wepy import wepy from 'wepy' import {_timer, author, location} from '../utils/auth' onShow() { let globalDt = this.$parent.globalData if(globalDt.userInfo.nickName && globalDt.userInfo.avatarUrl){ this.userInfo = globalDt.userInfo; }else{ this.getValue(); // 獲取userInfo } if(globalDt.location === null){ this.getLt(this); // 獲取地理位置 }else{ console.log('當前頁面獲取過location了') //console.log(globalDt.location) this.location = globalDt.location; } } async getValue () { const datam = await _timer(this) console.log(datam) this.userInfo = datam; this.$apply(); } async getLt (context) { const local = await location(context) console.log(local) this.location = local; this.$apply() }