不得已用url传递用户身份验证信息,但用户把这个连接分享别人后,别人也能登录他的账号
处理
三中情形
服务端返回一个url
http://test.com/?token=123
情形一:目标用户第一次进入
- 存储这个token到localStorage中
- 重写这个url —-> http://test.com/?token=***&flag=1
- 从localStorage取数据使用
情形二:目标用户第二次进入
- 因为有了这个flag,不再重写url,也不再存储参数
- 从localStorage取数据,因为第一次已经存储过了,可以直接取到。
情形三:目标用户分享了给别人
- 因为有了这个flag,不再重写url,也不再存储参数
- 从localStorage取数据,取不到,”请以正确的方式进入”
情形四:目标用户自己缓存清干净了
无法处理。
- 因为有了这个flag,不再重写url,也不再存储参数
- 从localStorage取数据,取不到,提示 “请以正确的方式进入”
不过这种已经过滤的很罕见了,产品多少人用还不知道呢,不要捡了芝麻忘了西瓜。把时间花费在解决这个极小数的问题上是不值的,用户也会对于产品有一定的bug忍受度。
基本代码
function getToken(url) {const urlParam = url.slice(url.indexOf('?'))const mURLSearchParams = new URLSearchParams(urlParam)if (!mURLSearchParams.has('flag')) {localStorage.setItem("token", mURLSearchParams.get('token'));history.pushState("", "", "?token=***&flag=1"); // 改变url参数}const token = localStorage.getItem("token");if (token === null) {alert('请通过正确方式进入')return}return token}getToken("http://test.com/?token=123")// getToken("http://test.com/?token=***&flag=1")
