很多开发者在打开小程序时就通过组件方式唤起 getUserInfo 弹窗,如果用户点击拒绝,无法使用小程序,这种做法打断了用户正常使用小程序的流程,同时也不利于小程序获取新用户。详情可以点击官方调整链接微信官方链接
前提:
- 开发者工具版本不低于 1.05.2103022
- 基础库版本不低于 2.10.4
- 基础库查看再微信开发工具的详情–>本地设置—>调用基础库
- 本次使用2.15.0
使用:
公用一个登录注册接口:
import http from'../utils/http'// 主页api
export default{
registe: data=> http.post('/user/login', data,{ notAuth:true}),}
1.传统的getUserInfo
html:
<button open-type="getUserInfo" lang="zh_CN" bindgetuserinfo="saoMiao">按钮</button>
js:
saoMiao(){
let that=this
let info= e.detail
const res= awaitgetApp().login(info);}
app.js的login方法
login(e){
const token= wx.getStorageSync('token')if(token)return Promise.resolve(true)
let info= e.userInforeturnnewPromise((resolve, reject)=>{
wx.login({
success: async(d)=>{
info.code= d.code;
const res= await api.registe(info);if(!res){resolve(false)return wx.showToast({
icon:'none',
title: res?.resultMsg??'登录失败'})}
wx.showToast({
icon:'none',
title:'登录成功'})
wx.aldstat.sendOpenid(res.resultData.userInfo.openId)
wx.setStorageSync("token", res.resultData.token)
wx.setStorageSync("userInfo", res.resultData.userInfo)resolve(true)},})})},
2.新版本getUserProfile
html:
<button bindtap="saoMiao">按钮</button>
js:
let that=this
const res= awaitgetApp().newlogin();if(!res)return;
app.js的newlogin方法
newlogin(){
const token= wx.getStorageSync('token')if(token)return Promise.resolve(true)returnnewPromise((resolve,rej)=>{
wx.getUserProfile({
desc:'业务需要',
success:async res=>{
wx.login({
success: async(re)=>{if(re.code){
res.userInfo.code=re.code
const data= await(res.userInfo)
wx.request({
url: config.apiBase+'/user/login?code='+re.code,
data: res.userInfo,
method:"POST",success(resp){if(!resp){resolve(false)return wx.showToast({
icon:'none',
title: resp?.resultMsg??'登录失败'})}
wx.showToast({
icon:'none',
title:'登录成功'})
console.log(resp)
wx.aldstat.sendOpenid(resp.data.resultData.userInfo.openId)
wx.setStorageSync("token", resp.data.resultData.token)
wx.setStorageSync("userInfo", resp.data.resultData.userInfo)// resolve(resp)resolve(true)}})}}})},fail(res){
console.log(res)if(res.errMsg=="getUserProfile:fail auth deny"){
wx.showToast({
icon:'none',
title:'拒绝授权'})}}})})},