共计 3180 个字符,预计需要花费 8 分钟才能阅读完成。
在 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()
}