首先附上官方文档地址和授权流程
官方地址:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html
流程图:
大致逻辑:授权 -> 发送code到服务器获取session_key - > 保存在小程序缓存内 -> 调用wx.getUserInfo和session_key获取用户信息 -> 登录成功返回访问token -> 记录登录状态 -> 执行登录成功监听(失败则不监听)
直接上代码,一下均为小程序组件模式有兴趣的可以看下官方文档
创建components(自定义名称)文件夹pages文件夹同级主要放置组件文件
创建 authorize (自定义名称)文件夹 还是一样的创建 对应的authorize.js ,authorize.wxml .authorize.wxss,authorize.json特别注意这里的 authorize.json 文件里面要定义当前页面为组件
{
"component": true
}
到这里准备工作完成
authorize.js 换成组件的写法,具体参考小程序官方文档,这里展示我定义的
Component({
//组件的对外属性 说的确实很官方,用过vue组件的就很容易理解这点
//父级向子级传值这里就是接收值得地方
properties:{
//名称要和父级绑定的名称相同
//这里主要是控制自动授权弹框是否显示 true=隐藏 false=显示
iShidden:{
type:Boolean,//定义类型
value: true,//定义默认值
},
//是否自动登录 这里主要用于没有授权是否自动弹出授权提示框
/
setErrorCount:function(){
if (!this.data.ErrorCount) this.data.ErrorCount=1;
else this.data.ErrorCount++;
this.setData({ ErrorCount: this.data.ErrorCount});
},
getErrorCount:function(){
return this.data.ErrorCount >= 10 ? true : false;
}
以上就是组件内全部的方法需要在组件生命周期函数内调用第一步的方法检测授权,执行登录
attached(){
this.setAuthStatus();
}
注:在网络请求中一定要处理token失效的操作,主要把 app.globalData.token和app.globalData.isLog 设置回空和false
这里附上没有定义的一些app内公用的快捷方法以下的方法最好是写在其他文件里面在app.js里面写一个快捷调用的方法
const basePost = function (url, data, successCallback, errorCallback, header) {
if (typeof url == 'object') url = U(url);
wx.request({
url: url,
data: data,
dataType : 'json',
method: 'POST',
header: header,
success: function (res) {
try{
if (res.data.code == 200) {
successCallback && successCallback(res.data);
} else {
if (res.data.code == 402) getApp().globalData.token = '', getApp().globalData.isLog = false;
//返回状态为401时,用户被禁止访问 关闭当前所有页面跳转至用户禁止登录页面
if (res.data.code == 401) return Tips({ title: res.data.msg}, { tab: 4, url:'/pages/login-status/login-status'});
errorCallback && errorCallback(res.data);
}
} catch (e) {
console.log(e);
}
}, fail: function (res) {
errorCallback && errorCallback(res);
},
complete: function (res) {
}
});
}
const U = function (opt, url) {
var m = opt.m || 'routine_two', c = opt.c || 'auth_api', a = opt.a || 'index', q = opt.q || '',
p = opt.p || {}, params = '', gets = '';
if (url == undefined) url=getApp().globalData.url;
params = Object.keys(p).map(function (key) {
return key + '/' + p[key];
}).join('/');
gets = Object.keys(q).map(function (key) {
return key + '=' + q[key];
}).join('&');
return url + '/' + m + '/' + c + '/' + a + (params == '' ? '' : '/' + params) +'.html'+ (gets == '' ? '' : '?' + gets);
}
代码量有点多,都是能用到的,望大神们多多指点
本小程序后台框架由 http://github.crmeb.net/u/blue 提供
TP5+EasyWeChat技术支持
如果对微信小程序授权不熟悉的可以用 EasyWeChat,确实好用;不是来吹这个EasyWeChat来了,只是个人觉得好用勿喷
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。



