用 token 代替 cookie, 在点超链接跳转的时候, 怎么把 token 附加到 request 里面

2016-11-04 21:23:29 +08:00
 wanganjun
新手, 之前学别人博客的东西用 cookie/session 做用户登录, 刚用 firebug 看了 cookie, 说说我看到的 cookie 的传递情况.

1. 在 login.html 页面, 点击登录以后, 服务器返回 cookie 并告诉浏览器需要请求 home.html
2. 浏览器自动在 request 中附加 cookie 并请求 home.html, 服务器把 cookie 解析成 session, 验证后返回 home.html 文件
3. home.html 加载完以后, 浏览器请求了一个 json 文件, 这个文件是公有的, 但是浏览器也自动附加了 cookie

在上面的过程里面, 用户登录以后, 浏览器会主动在每个请求中附加 cookie 好在需要的时候用于身份验证.

现在我用 token 代替 cookie, 怎么才能让浏览器也自动把 token 附加到 request 里面.
ajax 的请求可以手动附加 token, 但是 <a href="/xxx.html">, <form action="/xxx.html"> 和 location.href = 'xxx.html' 的怎么弄.

做出来的 json 接口既要支持桌面站点, 也要支持手机 app. 我想在有一个想法, 把 token 按照 cookie 的格式返回给客户端, 浏览器可以直接支持, 手机 app 解析 header. 不知道行不行.
19436 次点击
所在节点    Node.js
31 条回复
wanganjun
2016-11-06 14:17:05 +08:00
@ichou 我没查到 authorized 字段的说明, 能不能给个链接
wanganjun
2016-11-06 14:19:56 +08:00
@microchang 你说的代理 <a> 的请求是这样吗

$('a').click(function () {
window.open(this.href, this.target || '_self');
return false;
})

按这个代码也只能把 token 放到 url 里面
ichou
2016-11-06 15:19:11 +08:00
参考 jwt auth
garrydzeng
2016-11-06 21:58:59 +08:00
@wanganjun

看起来只能这样:

1. 往 document 对象监听 click 事件,捕获所有 a 标签的
2. 检查是否请求自己的地址
3. 改用 AJAX 添加请求头然后发送请求

另外 ichou 说的是 Authorization 请求头
详见 RFC7235 ( https://tools.ietf.org/html/rfc7235 )
lianxiaoyi
2016-11-07 09:28:12 +08:00
最近为毛那么多地址癖!最好地址栏什么都不带,但是又能满足我所有的参数!可能麽?
wanganjun
2016-11-07 11:46:39 +08:00
@garrydzeng 如果 ajax 请求回来一个 html 文件该怎么办呢
wanganjun
2016-11-07 12:16:38 +08:00
@garrydzeng 我试了一下, document.write 可以覆盖页面, 但是地址栏没变, 也没办法点后退按钮回到上一个页面, 看来还是要把 token 放到 query 里面
garrydzeng
2016-11-08 12:28:37 +08:00
@wanganjun

如果不是单页应用
还是建议用 cookie 来传输 token
这样在地址上不可见
用的时候注意防范跨站等等攻击就行了
简单方便
XisucksYi
2020-08-31 18:13:47 +08:00
参考 GitHub 的 token 格式

https://token_id@github.com/xxxx

知道 token 加到哪里了吗
XisucksYi
2020-08-31 18:15:11 +08:00
@liuxey URL 里的 userinfo 被你吃了吗
liuxey
2020-08-31 19:06:23 +08:00
@XisucksYi #30 真是一言难尽

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

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

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

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

© 2021 V2EX