node+vue+axios重定向问题
发布于 6 年前 作者 ZCZ12138 6202 次浏览 来自 问答

学校有个项目,多方合作的那种,需要各个系统之间单点登录,我们负责登录入口,预想的方案是:

  1. 其他系统在localStorage或cookie中没有检测到token,跳转到我们系统进行登录,跳转的url带地址参数
  2. 我们系统验证成功后,将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请求进行后端验证: image.png

验证通过后发送direct请求,进行服务端重定向(target为目标地址): image.png

浏览器中可以看到发出了另外的跳转请求并获取到了内容: image.png

但浏览器url并没有改变,怀疑是测试页面的res.sendFile的原因,所以拿了其他小伙伴的前端项目测试,也是上面的步骤,最后跳转请求报类似跨域的错: image.png

另外,尝试res.location(target)与res.redirect(target),和上面情况一致

疑问:

  1. 此种方式是否正确?能否满足跨系统间传递token?如不正确,能否告知已经验证通过的方案?
  2. 测试页面的res.sendFile是否不合适此时的情景?
  3. 重定向请求跳转到前端为何也会报跨域的问题? 谢谢!!
4 回复

并不知道 帮顶

你好,任何非 2xx 状态码都认为 preflight 失败, 所以 preflight 不允许重定向。

来自 CNode-iOS

做一个单点登录的界面,解决!

异步请求不能重定向页面吧?前端请求成功了直接跳转就好了

来自酷炫的 CNodeMD

回到顶部