node+vue+axios重定向问题
发布于 7 年前 作者 ZCZ12138 6901 次预览 最后一次回复是 7 年前 来自 问答
学校有个项目,多方合作的那种,需要各个系统之间单点登录,我们负责登录入口,预想的方案是:
- 其他系统在localStorage或cookie中没有检测到token,跳转到我们系统进行登录,跳转的url带地址参数
- 我们系统验证成功后,将token携带于headers中,通过重定向请求发给1步骤中带的地址
我们系统前端采用vue + axios,后端nodejs 现情况问题如下: 通过编写另一简单服务(主要是res.sendFile发送html页面),该页面中通过a标签跳转,示例如下:
<a href="http://127.0.0.1:12577/login?redirect=http://localhost:18118/index">点击跳转</a>
vue前端项目也就是上面的12577中,通过this.$route.query.redirect拿到需要跳转的地址,login请求进行后端验证:
验证通过后发送direct请求,进行服务端重定向(target为目标地址):
浏览器中可以看到发出了另外的跳转请求并获取到了内容:
但浏览器url并没有改变,怀疑是测试页面的res.sendFile的原因,所以拿了其他小伙伴的前端项目测试,也是上面的步骤,最后跳转请求报类似跨域的错:
另外,尝试res.location(target)与res.redirect(target),和上面情况一致
疑问:
- 此种方式是否正确?能否满足跨系统间传递token?如不正确,能否告知已经验证通过的方案?
- 测试页面的res.sendFile是否不合适此时的情景?
- 重定向请求跳转到前端为何也会报跨域的问题? 谢谢!!
4 回复
并不知道 帮顶
你好,任何非 2xx 状态码都认为 preflight 失败, 所以 preflight 不允许重定向。
来自 CNode-iOS
做一个单点登录的界面,解决!
异步请求不能重定向页面吧?前端请求成功了直接跳转就好了
来自酷炫的 CNodeMD