用户未授权处理解决方案
发布于 5 年前 作者 weilong 19651 次浏览 来自 问答

改版之后的wx.getUserInfo 和 wx.authorize在使用scope.userInfo时,无法再提供授权弹框,对此需要在原来代码的基础上进行修改,在onLaunch中对于授权进行判断,授权的话直接使用wx.getUserInfo,未授权会跳到带button的登录页,关键在于登录成功过如果能够返回原先的网页,跳页面之前使用的是navigateTo,但是会产生用户点击后退的问题,但是如果使用redirectTo,则不能返回原先的网页,有没有大神有更好的解决方案啊,万分感谢

代码:

app.js

// 进行授权判断

wx.getSetting({

success: res => {

if (res.authSetting[‘scope.userInfo’]) {

// 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框

    wx.getUserInfo();

} else {

//没有授权,去登录页面 提示用户进行登录

wx.navigateTo({

url: ‘/pages/login/login’,

})

}

console.log(“授权判断结束”)

}

})

login 页面:

login:function (e) {

if(e.detail.userInfo){

let sessionId = wx.getStorageSync(“sessionId”);

console.log("where login by user sessionid = "+sessionId);

var data = {

retStatus: 200,

encryptedData: e.detail.encryptedData,

userInfo: e.detail.userInfo,

iv: e.detail.iv

}

//获取用户信息

setTimeout(function () {

wx.navigateBack({

delta:1

})

}, 1500);

}else{

console.log(“refuse authorize”)

}

},

8 回复

在app里面设置全局变量,存储要返回的页面path(也可以带上后面的参数),在完成业务逻辑之后,判断这个变量是否为空,不为空 直接跳过去,同时将这个变量设置为’’。

wx.redirectTo({

    url:’/pages/login/login?redirect_uri=当前页面路径’

});

登录页面授权成功后,获取redirect_uri参数,再次使用wx.redirectTo重定向当前页面

如果我的回答对您有帮助,请点赞

把登录页做成弹出层进行登录

获取当前的页面url(带参数的页面url)

var pages = getCurrentPages()    //获取加载的页面

var currentPage = pages[pages.length - 1]    //获取当前页面的对象

var url = currentPage.route    //当前页面url

var options = currentPage.options    //如果要获取url中所带的参数可以查看options

//拼接url的参数

var urlWithArgs = url + ‘?’

for (var key in options) {

var value = options[key]

urlWithArgs += key + ‘=’ + value + ‘&’

}

urlWithArgs = urlWithArgs.substring(0, urlWithArgs.length - 1)

获取当前的页面url(不带参数的页面url)

var pages = getCurrentPages()    //获取加载的页面

var currentPage = pages[pages.length - 1]    //获取当前页面的对象

var url = currentPage.route    //当前页面url

一步搞定,不要在onLaunch判断,放在onShow里判断。跳转页面用redirectTo,成功后也用这个返回到原来的页面

做一个弹框,里面放个按钮来获取用户信息

做成一个弹层的组件,方便使用

而且当前页面路径没有办法确定额

回到顶部