uni-app小程序登录,获取手机号
1.小程序授权登录
新建.js文件,在需要的地方引入使用
代码
。
import api from '../request/api.js';//引入封装的请求
//授权登录
//点击授权获取用户信息************微信
function getUserInfo(code,callback) {
// 获取用户信息
uni.getUserProfile({
desc: 'Wexin', // 这个参数是必须的
success: res => {
console.log(res)
uni.setStorageSync('avatar',res.userInfo.avatarUrl);
uni.setStorageSync('gender',res.userInfo.gender+1);
uni.setStorageSync('nickname',res.userInfo.nickName);
authorizedLogin(res.userInfo,code,(res)=>{
callback(res)
});
},
fail: (err) => {
console.log("错误", err);
}
});
};
function authorizedLogin(userInfo,code,callback) {
// let that = this;
var p = getSetting();
uni.showLoading({
title: '加载中',
mask: 'true'
});
p.then(function(isAuth) {
console.log('是否已经授权', isAuth);
if (isAuth) {
// console.log('用户信息,加密数据', e);
//接下来就是访问接口.
let data = {
type: 'wxLogin',
code: code,
picture:userInfo.avatarUrl,
sex:userInfo.gender+1,
nickname: userInfo.nickName,
};
api.post('user', data, (res) => {
uni.hideLoading();
callback(res);
})
} else {
uni.showToast({
title: '授权失败,请确认授权已开启',
mask: true,
icon: 'none'
})
}
});
};
//获取用户的当前设置
function getSetting() {
return new Promise(function(resolve, reject) {
uni.getSetting({
success: function(res) {
if (res.authSetting['scope.userInfo']) {
console.log('存在');
resolve(true);
} else {
console.log('不存在');
resolve(false);
}
}
})
}).catch((e) => {
console.log(e)
});
};
export default {
getUserInfo
}
在需要的页面引用:
import login from '../../common/login.js';
export default {
data() {
return {
code:''
}
},
method:{
login(){
login.getUserInfo(this.code,(res) => {
console.log(res)
});
}
}
}
2.获取用户手机号
获取手机号需要用户主动触发,可以自定义弹框点击触发(这块可根据自己业务场景来实现)。
代码
<button type="primary" lang="zh_CN" open-type='getPhoneNumber' @getphonenumber="getPhoneNumber">获取手机号</button>
js代码
methods
//申请获取手机号
getPhoneNumber(e){
this.phoneNumberAlert = false
this.mask = false
if(e.detail.errMsg == "getPhoneNumber:ok"){
let data = {
type: 'mobile',
session_key:this.session_key,//登录完成的返回数据
encrypted_data:e.detail.encryptedData,
iv: e.detail.iv
};
//请求接口解密
this.$api.post('user', data, (res) => {
console.log(res)
if (res.code == 200) {
this.phoneNumber = res.data.phoneNumber
this.register();
}
},true)
}else{
uni.showToast({
title: '请允许获取你的手机号码,否则部分功能无法使用',
mask: true,
icon: 'none'
})
}
},
注:这里获取到的是加密数据,可通过微信官方接口获取,也可请求后台接口获取。