Files

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 };