支持配置sessionExpireTime
This commit is contained in:
11
README.md
11
README.md
@@ -105,6 +105,8 @@ weRequest.request({
|
|||||||
|reportCGI|Function|否||接口返回成功之后,会执行统一的回调函数,这里可以做统一的耗时上报等处理|
|
|reportCGI|Function|否||接口返回成功之后,会执行统一的回调函数,这里可以做统一的耗时上报等处理|
|
||||||
|mockJson|Object|否||可为接口提供mock数据|
|
|mockJson|Object|否||可为接口提供mock数据|
|
||||||
|globalData|Object/Function|否||所有请求都会自动带上这里的参数|
|
|globalData|Object/Function|否||所有请求都会自动带上这里的参数|
|
||||||
|
|sessionExpireTime|Int|否|null|为用户登陆态设置本地缓存时间(单位为ms),一旦过期,直接废弃缓存中的登陆态|
|
||||||
|
|sessionExpireKey|String|否|sessionExpireKey|如果为用户登陆态设置了本地缓存时间,则过期时间将以此值为key存储在Storage中|
|
||||||
|
|
||||||
##### codeToSession参数说明
|
##### codeToSession参数说明
|
||||||
|
|
||||||
@@ -261,7 +263,14 @@ weRequest.request({
|
|||||||
### .getConfig()
|
### .getConfig()
|
||||||
|
|
||||||
[return Object]
|
[return Object]
|
||||||
获取weRequest的配置。目前Object仅包含urlPerfix字段
|
获取weRequest的配置。返回的Object内容如下:
|
||||||
|
|
||||||
|
|参数名|类型|说明|
|
||||||
|
| :-------- | :-------| :------ |
|
||||||
|
|urlPerfix|String|在组件初始化时传入的请求URL的固定前缀|
|
||||||
|
|sessionExpireTime|Int|在组件初始化时传入的用户登陆态设置本地缓存时间|
|
||||||
|
|sessionExpireKey|String|在组件初始化时传入的用户登陆态本地缓存时间Storage的key|
|
||||||
|
|sessionExpire|Int|用户登陆态本地缓存过期的时间戳|
|
||||||
|
|
||||||
### .login()
|
### .login()
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
2
build/weRequest.min.js
vendored
2
build/weRequest.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -1,63 +1,64 @@
|
|||||||
var weRequest = require('../src/weRequest');
|
var weRequest = require('../src/weRequest');
|
||||||
|
|
||||||
weRequest.init({
|
weRequest.init({
|
||||||
// 存在localStorage的session名称,且CGI请求的data中会自动带上以此为名称的session值;可不配置,默认为session
|
// [可选] 存在localStorage的session名称,且CGI请求的data中会自动带上以此为名称的session值;可不配置,默认为session
|
||||||
sessionName: "session",
|
sessionName: "session",
|
||||||
// 请求URL的固定前缀;可不配置,默认为空
|
// [可选] 请求URL的固定前缀;可不配置,默认为空
|
||||||
urlPerfix: "https://www.example.com/",
|
urlPerfix: "https://www.example.com/",
|
||||||
// 触发重新登录的条件,res为CGI返回的数据
|
// [必填] 触发重新登录的条件,res为CGI返回的数据
|
||||||
loginTrigger: function (res) {
|
loginTrigger: function (res) {
|
||||||
// 此处例子:当返回数据中的字段errcode等于-1,会自动触发重新登录
|
// 此处例子:当返回数据中的字段errcode等于-1,会自动触发重新登录
|
||||||
return res.errcode == -1;
|
return res.errcode == -1;
|
||||||
},
|
},
|
||||||
// 用code换取session的CGI配置
|
// [必填] 用code换取session的CGI配置
|
||||||
codeToSession: {
|
codeToSession: {
|
||||||
// CGI的URL
|
// [必填] CGI的URL
|
||||||
url: 'user/login',
|
url: 'user/login',
|
||||||
// 调用改CGI的方法;可不配置,默认为GET
|
// [可选] 调用改CGI的方法;可不配置,默认为GET
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
// CGI中传参时,存放code的名称,此处例子名称就是code;可不配置,默认值为code
|
// [可选] CGI中传参时,存放code的名称,此处例子名称就是code;可不配置,默认值为code
|
||||||
codeName: 'code',
|
codeName: 'code',
|
||||||
// 登录接口需要的其他参数;可不配置,默认为{}
|
// [可选] 登录接口需要的其他参数;可不配置,默认为{}
|
||||||
data: {},
|
data: {},
|
||||||
// CGI中返回的session值
|
// [必填] CGI中返回的session值
|
||||||
success: function (res) {
|
success: function (res) {
|
||||||
// 此处例子:CGI返回数据中的字段session即为session值
|
// 此处例子:CGI返回数据中的字段session即为session值
|
||||||
return res.session;
|
return res.session;
|
||||||
},
|
},
|
||||||
|
// [可选] 接口失败的回调,可不配置,默认为弹窗报错
|
||||||
fail: function(obj, res) {
|
fail: function(obj, res) {
|
||||||
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// 登录重试次数,当连续请求登录接口返回失败次数超过这个次数,将不再重试登录
|
// [可选] 登录重试次数,当连续请求登录接口返回失败次数超过这个次数,将不再重试登录;可不配置,默认为重试3次
|
||||||
reLoginLimit: 2,
|
reLoginLimit: 2,
|
||||||
// 触发请求成功的条件
|
// [必填] 触发请求成功的条件
|
||||||
successTrigger: function (res) {
|
successTrigger: function (res) {
|
||||||
// 此处例子:当返回数据中的字段errcode等于0时,代表请求成功,其他情况都认为业务逻辑失败
|
// 此处例子:当返回数据中的字段errcode等于0时,代表请求成功,其他情况都认为业务逻辑失败
|
||||||
return res.errcode == 0;
|
return res.errcode == 0;
|
||||||
},
|
},
|
||||||
// 成功之后返回数据;可不配置
|
// [可选] 成功之后返回数据;可不配置
|
||||||
successData: function (res) {
|
successData: function (res) {
|
||||||
// 此处例子:返回数据中的字段data为业务接受到的数据
|
// 此处例子:返回数据中的字段data为业务接受到的数据
|
||||||
return res.data;
|
return res.data;
|
||||||
},
|
},
|
||||||
// 当CGI返回错误时,弹框提示的标题文字
|
// [可选] 当CGI返回错误时,弹框提示的标题文字
|
||||||
errorTitle: function(res) {
|
errorTitle: function(res) {
|
||||||
// 此处例子:当返回数据中的字段errcode等于0x10040730时,错误弹框的标题是“温馨提示”,其他情况下则是“操作失败”
|
// 此处例子:当返回数据中的字段errcode等于0x10040730时,错误弹框的标题是“温馨提示”,其他情况下则是“操作失败”
|
||||||
return res.errcode == 0x10040730 ? '温馨提示' : '操作失败'
|
return res.errcode == 0x10040730 ? '温馨提示' : '操作失败'
|
||||||
},
|
},
|
||||||
// 当CGI返回错误时,弹框提示的内容文字
|
// [可选] 当CGI返回错误时,弹框提示的内容文字
|
||||||
errorContent: function(res) {
|
errorContent: function(res) {
|
||||||
// 此处例子:返回数据中的字段msg为错误弹框的提示内容文字
|
// 此处例子:返回数据中的字段msg为错误弹框的提示内容文字
|
||||||
return res.msg ? res.msg : '服务可能存在异常,请稍后重试'
|
return res.msg ? res.msg : '服务可能存在异常,请稍后重试'
|
||||||
},
|
},
|
||||||
// 当出现CGI错误时,统一的回调函数,这里可以做统一的错误上报等处理
|
// [可选] 当出现CGI错误时,统一的回调函数,这里可以做统一的错误上报等处理
|
||||||
errorCallback: function(obj, res) {
|
errorCallback: function(obj, res) {
|
||||||
// do some report
|
// do some report
|
||||||
},
|
},
|
||||||
// 是否需要调用checkSession,验证小程序的登录态过期,可不配置,默认为false
|
// [可选] 是否需要调用checkSession,验证小程序的登录态过期,可不配置,默认为false
|
||||||
doNotCheckSession: true,
|
doNotCheckSession: true,
|
||||||
// 上报耗时的函数,name为上报名称,startTime为接口调用开始时的时间戳,endTime为接口返回时的时间戳
|
// [可选] 上报耗时的函数,name为上报名称,startTime为接口调用开始时的时间戳,endTime为接口返回时的时间戳
|
||||||
reportCGI: function(name, startTime, endTime, request) {
|
reportCGI: function(name, startTime, endTime, request) {
|
||||||
//wx.reportAnalytics(name, {
|
//wx.reportAnalytics(name, {
|
||||||
// time: endTime - startTime
|
// time: endTime - startTime
|
||||||
@@ -74,14 +75,18 @@ weRequest.init({
|
|||||||
//})
|
//})
|
||||||
console.log(name + ":" + (endTime - startTime));
|
console.log(name + ":" + (endTime - startTime));
|
||||||
},
|
},
|
||||||
// 提供接口的mock,若不需使用,请设置为false
|
// [可选] 提供接口的mock,若不需使用,请设置为false
|
||||||
mockJson: require("../../mock.json"),
|
mockJson: require("../../mock.json"),
|
||||||
// 所有请求都会自动带上globalData里的参数
|
// [可选] 所有请求都会自动带上globalData里的参数
|
||||||
globalData: function() {
|
globalData: function() {
|
||||||
return {
|
return {
|
||||||
version: getApp().version
|
version: getApp().version
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
// [可选] session本地缓存时间(单位为ms),可不配置,默认不设置本地缓存时间
|
||||||
|
sessionExpireTime: 24 * 60 * 60 * 1000,
|
||||||
|
// [可选] session本地缓存时间存在Storage中的名字,可不配置,默认为 sessionExpireKey
|
||||||
|
sessionExpireKey: "sessionExpireKey"
|
||||||
})
|
})
|
||||||
|
|
||||||
module.exports = weRequest;
|
module.exports = weRequest;
|
||||||
|
|||||||
@@ -23,6 +23,12 @@ var errorCallback = null;
|
|||||||
var reportCGI = false;
|
var reportCGI = false;
|
||||||
var mockJson = false;
|
var mockJson = false;
|
||||||
var globalData = false;
|
var globalData = false;
|
||||||
|
// session在本地缓存的有效时间
|
||||||
|
var sessionExpireTime = null;
|
||||||
|
// session在本地缓存的key
|
||||||
|
var sessionExpireKey = "sessionExpireKey";
|
||||||
|
// session过期的时间点
|
||||||
|
var sessionExpire = Infinity;
|
||||||
|
|
||||||
//global data
|
//global data
|
||||||
var session = '';
|
var session = '';
|
||||||
@@ -71,9 +77,18 @@ function checkSession(callback, obj) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function doLogin(callback, obj) {
|
function doLogin(callback, obj) {
|
||||||
if (session || obj.isLogin) {
|
if (obj.isLogin) {
|
||||||
// 缓存中有session,或者是登录接口
|
// 登录接口,直接放过
|
||||||
typeof callback === "function" && callback();
|
typeof callback === "function" && callback();
|
||||||
|
} else if(session) {
|
||||||
|
// 缓存中有session
|
||||||
|
if(sessionExpireTime && new Date().getTime() > sessionExpire) {
|
||||||
|
// 如果有设置本地session缓存时间,且缓存时间已到
|
||||||
|
session = '';
|
||||||
|
doLogin(callback, obj);
|
||||||
|
} else {
|
||||||
|
typeof callback === "function" && callback();
|
||||||
|
}
|
||||||
} else if (logining) {
|
} else if (logining) {
|
||||||
// 正在登录中,请求轮询稍后,避免重复调用登录接口
|
// 正在登录中,请求轮询稍后,避免重复调用登录接口
|
||||||
flow.wait('doLoginFinished', function () {
|
flow.wait('doLoginFinished', function () {
|
||||||
@@ -117,6 +132,14 @@ function doLogin(callback, obj) {
|
|||||||
success: function (s) {
|
success: function (s) {
|
||||||
session = s;
|
session = s;
|
||||||
sessionIsFresh = true;
|
sessionIsFresh = true;
|
||||||
|
// 如果有设置本地session过期时间
|
||||||
|
if(sessionExpireTime) {
|
||||||
|
sessionExpire = new Date().getTime() + sessionExpireTime;
|
||||||
|
wx.setStorage({
|
||||||
|
key: sessionExpireKey,
|
||||||
|
data: sessionExpire
|
||||||
|
})
|
||||||
|
}
|
||||||
typeof callback === "function" && callback();
|
typeof callback === "function" && callback();
|
||||||
wx.setStorage({
|
wx.setStorage({
|
||||||
key: sessionName,
|
key: sessionName,
|
||||||
@@ -492,9 +515,16 @@ function init(params) {
|
|||||||
reportCGI = params.reportCGI || false;
|
reportCGI = params.reportCGI || false;
|
||||||
mockJson = params.mockJson || false;
|
mockJson = params.mockJson || false;
|
||||||
globalData = params.globalData || false;
|
globalData = params.globalData || false;
|
||||||
|
sessionExpireTime = params.sessionExpireTime || null;
|
||||||
|
sessionExpireKey = params.sessionExpireKey || "sessionExpireKey";
|
||||||
|
|
||||||
try {
|
try {
|
||||||
session = wx.getStorageSync(sessionName) || '';
|
session = wx.getStorageSync(sessionName) || '';
|
||||||
|
sessionExpire = wx.getStorageSync(sessionExpireKey) || Infinity;
|
||||||
|
// 如果有设置本地session过期时间,且验证已过期,则直接清空session
|
||||||
|
if(new Date().getTime() > sessionExpire) {
|
||||||
|
session = '';
|
||||||
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -548,7 +578,10 @@ function getSession() {
|
|||||||
|
|
||||||
function getConfig() {
|
function getConfig() {
|
||||||
return {
|
return {
|
||||||
'urlPerfix': urlPerfix
|
urlPerfix: urlPerfix,
|
||||||
|
sessionExpireTime: sessionExpireTime,
|
||||||
|
sessionExpireKey: sessionExpireKey,
|
||||||
|
sessionExpire: sessionExpire
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -560,4 +593,4 @@ module.exports = {
|
|||||||
login: login,
|
login: login,
|
||||||
getSession: getSession,
|
getSession: getSession,
|
||||||
getConfig: getConfig
|
getConfig: getConfig
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user