39 lines
1.2 KiB
JavaScript
39 lines
1.2 KiB
JavaScript
/** 微信扫码绑定的短期续接数据;存储由调用方传入,token 不放进页面跳转 URL。 */
|
|
var e = `console.wechat-binding`;
|
|
// 写入期限取服务端截止时间和五分钟上限的较早值,已过期会话立即拒绝。
|
|
function t(t, n, r = Date.now()) {
|
|
if (!t.ticket || !t.token) throw Error(`扫码会话无效,请重新扫码`);
|
|
let i = Math.min(r + 3e5, t.expire_time ? t.expire_time * 1e3 : r + 3e5);
|
|
if (i <= r) throw Error(`二维码已过期,请重新扫码`);
|
|
n.setItem(
|
|
e,
|
|
JSON.stringify({
|
|
ticket: t.ticket,
|
|
token: t.token,
|
|
expires: i,
|
|
}),
|
|
);
|
|
}
|
|
// 读取时重新校验结构和期限;格式损坏、过期或异常长有效期均删除,避免继续复用。
|
|
function n(t, n = Date.now()) {
|
|
try {
|
|
let r = JSON.parse(t.getItem(e) || `null`);
|
|
if (
|
|
r &&
|
|
typeof r.ticket == `string` &&
|
|
r.ticket &&
|
|
typeof r.token == `string` &&
|
|
r.token &&
|
|
typeof r.expires == `number` &&
|
|
r.expires > n &&
|
|
r.expires <= n + 3e5
|
|
)
|
|
return r;
|
|
} catch {}
|
|
return (t.removeItem(e), null);
|
|
}
|
|
function r(t) {
|
|
t.removeItem(e);
|
|
}
|
|
export { n, t as r, r as t };
|