请教一个单点登录回调地址问题

2021-01-11 16:11:39 +08:00
 renvip
前后端分离,flask+react ,使用域名 xxx.com ,nginx 分发 /api 到后端
前端 url: xxx.com/
页面请求 url:xxx.com/api/data,如果 token 失效,后端返回 401
页面使用响应拦截器,如何状态码为 401,则重定向到 url: xxx.com/api/login
后端 l 路由 api/login 返回重定向 return redirect(url_for('cas.login'))

问题:按说应该单点登录成功后,应该回调到 url :xxx.com/ 先在重定向到了 xxx.com/api/data,页面出现一堆 json 数据,
在 api/login 视图函数内打印 request.referrer,确实是 xxx.com/,我该如何解决问题!

另:我是在 chrome 中首次打开域名登录和 ctrl+shift+delect 清除 cookies 后,即:不存在 token 时,页面重定向失败,
那么应该是我的登录验证有问题,我的登录验证中的逻辑为,如果不存在 token,就返回重定向 return flask.redirect(flask.url_for('cas.login'))

实在是 不知怎么搞了
1737 次点击
所在节点    Python
5 条回复
renvip
2021-01-11 16:37:26 +08:00
简化一下问题:前端伪造 referrer 是行不通的,所以如何让请求后端的 url 返回 401 后响应拦截器重定向单点登录时的 referrer 地址为前端 url,而非后端 url ?
思路:不用响应拦截器,直接在前端直接校验 token ?
xuanbg
2021-01-11 17:05:50 +08:00
前端在跳转到 xxx.com/api/login 前,自己保存 xxx.com/api/data 这个 url 。
ryanlid
2021-01-11 17:34:25 +08:00
跳转到登录页时,把登录前的 url,通过 url 参数传到登录页

登录完成后,重定向到登录前页面。
wuwukai007
2021-01-11 22:07:15 +08:00
前端没有路由守卫吗,前端在 cookie 或 localsession 中拿不到 token,就直接跳到登录页
renvip
2021-01-20 09:57:42 +08:00
@renvip @xuanbg @ryanlid @wuwukai007 感谢,已解决,前端添加了路由守卫,后端向前端设置了 cookies 有效期,后端将首页的请求取消登录验证以皮面前端奇怪的 401 错误导致 cas_client 回调地址有误的问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/743885

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX