背景说明
最近在使用 Metabase 做一个内部工具的跳转传送门,大概实现的方式是这样:
- 通过 Metabase 带有的字段支持链接跳转的功能,拼接上查询结果的部分
- 后端服务完成对用户行为的校验,并且完成身份预认证,生成验证 token
- 然后带着预认证的信息跳转到对应的系统内
问题分析
起初用的时候发现还好,不过陆续有同学反馈有些行数的结果不能够进入后台去,而让其他人使用又是没问题;
简单分析了下服务端日志,发现不能正常登录情况是请求根本没有到后端服务器,浏览器直接进行了跳转,而之前签发的 token 是有时效的,超过时间就过期了,所以导致跳转后校验不通过
有兴趣的同学,可以点击上方的图片链接,去详细介绍的原文看看
解决思路
靠着对前端和浏览器一知半解+Google 出来的结果,只要欺骗浏览器每次请求的路径不一样,就可以解决这个问题。
所以解铃还须系铃人,当然还是靠着 Metabase 来解决这个问题
success
在 SQL 查询结果中增加一个每次都是不一样的结果字段 取 unixtimestamp 时间,然后将结果拼接到 url 中
SELECT
UNIX_TIMESTAMP(now()) AS `ts` //每次取值当前时间
FROM
table_name
解决之后对比
🎆🎆🎆 完毕,问题得以解决
其他
注意在后端服务上去除对时间参数的过滤,因为我是只处理了我想要的字段,所以这样的调整 服务端代码都不用改