微信小程序用户验证初探
2017-07-11 本文已影响0人
寒潭碎梦
背景#
在进行微信小程序开发时,对于用户身份如何验证一直没有找到好的解决方法,就自己思考了一个逻辑,进行用户身份验证.
逻辑说明#
验证逻辑图实现过程#
获取token并判断是否获取成功##
App({
data: {
'api_url' : 'https://baoxiu.hrsc.cc/index.php/index/',
'source_url' : 'https://baoxiu.hrsc.cc/'
},
onLaunch: function () {
wx.getStorage({
key: 'token',
success: function(storage){
that.globalData.token = storage.data;
wx.request({
url: that.data.api_url + 'Login/checkLogin',//后台验证登录
data: {
token : storage.data
},
method: 'POST', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
header: {
'content-type': 'application/json'
}, // 设置请求的 header
success: function(res){
if(res.data.errorcode == 0) {//后台判断已经登录
that.globalData.userInfo = res.data.userInfo;//保存登录信息
} else if(res.data.errorcode == 40001) {//后台判断没有登录
go_login();//调用登录函数
} else {
wx.showToast({
title: '登录失败',
duration: 2000
});//显示报错信息
}
}
});
},
fail: function(){//获取本地保存的token失败
//调用登录接口
wx.login({
success: function (code) {//获取登录code
wx.getUserInfo({
success: function (info) {//获取个人资料信息
wx.request({
url: that.data.api_url + 'Login/getUserInfo',//后台获取个人信息
data: {
'code': code.code,
'info': info.userInfo
},
method: 'POST', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
header: {
'content-type': 'application/json'
}, // 设置请求的 header
success: function(res){//用code换取openid返回信息
wx.setStorage({
key: 'token',
data: res.data.token,
success: function(){//保存token验证信息
that.globalData.token = res.data.token;
if(res.data.errorcode == 0) {//获取个人信息成功,将个人信息进行保存
that.globalData.userInfo = {
uid: res.data.uid,
nickName: info.userInfo.nickName,
avatarUrl: info.userInfo.avatarUrl,
tel: res.data.tel,
address: res.data.address,
};
} else {
wx.showToast({
title: '个人信息验证失败',
duration: 2000
});//显示报错信息
}
}
});
}
});
},
fail: function() {
wx.showToast({
title: '使用需要授权,请删除后重新使用!',
duration: 2000
});//显示报错信息
},
});
}
});
}
});
}
});
调用的登录函数##
function go_login(cb) {
wx.login({
success: function(res){
wx.request({
url: getApp().data.api_url + 'Login/login',
data: {
'code': res.code
},
method: 'POST',
header: {
'content-type': 'application/json'
}, // 设置请求的 header
success: function(res){//请求登录返回数据
if(res.data.errorcode == 0) {
wx.setStorage({
key: 'token',
data: res.data.token,
success: function(){
getApp().globalData.token = res.data.token;
getApp().globalData.userInfo = {
uid: res.data.uid,
nickName: res.data.nickName,
avatarUrl: res.data.avatarUrl,
tel: res.data.tel,
address: res.data.address,
};
typeof cb == "function" && cb();//这里可以跟登录成功后的回调函数
}
});
} else {
wx.showToast({
title: '登录失败',
duration: 2000
});//显示报错信息
}
}
})
}
});
}