需求是要求前端研究一下如何给登录认证自动续期

2025 年 7 月 24 日
 11000111010
最近开发一个插件,有一个优化需求。想让前端来做。要求做一个登录状态( token )的自动续期。。。
有点无语。。 服务端该干的事。让前端干。。
那行吧。我理解的就是 用全局 interceptors 响应拦截器去在 API 调用的时候查到服务端返回 401 或者单独的认证过期的 errorCode 之类的。。进行拦截然后拿到上一次用户登录的账号密码(还要先偷偷记在用户浏览器插件的本地存储里面) 自动调用一次登录然后把 token 刷掉。。这样子?。 有人给点建议吗。。。
3580 次点击
所在节点    程序员
34 条回复
yeqizhang
2025 年 7 月 24 日
恰好最近找了下双 token 的资料,但感觉和这个楼里面说的不太一样……refreshtoken 是给终端用的吗?
accelerator1
2025 年 7 月 24 日
@lambdaq chrome 对跨域 cookie 的限制已经越来越多了,除非不提供对外服务,不然使用 token 是必然的。
ndxxx
2025 年 7 月 24 日
@javalaw2010 #3 word 哥,没有什么是绝对的。refresh_token 能不能放在 cookie 里且 HttpOny ?如果可以是不是更科学是不是需要后端处理?
ndxxx
2025 年 7 月 24 日
@yeqizhang #21 理论上 ttl 长的的 refresh _token 应该被放在 httpOnly 的 cookie 里,access_token 放在 localstorage 里面,但是实践中很多时候 access_token 和 refresh_token 都放在了 localstorage 里了。这两种实现方式都是双 token ,后者前后端分离更友好点。
blackmirror
2025 年 7 月 24 日
@javalaw2010 Refresh 接口不就是后端写的 怎么就纯前端了
tf2
2025 年 7 月 24 日
@accelerator1 限制是多,难不成比 Authentication 头还多?
blackmirror
2025 年 7 月 24 日
纯前端方法每晚偷偷调用登录接口更新 token 参考某公司车机清积碳功能
SethShi
2025 年 7 月 24 日
@yeqizhang 和终端没关系, 任意客户端(app, 浏览器, 甚至服务端也是客户端(相对于别人的服务))



// 上个伪代码
var tokenCache, refreshCache


beforeMiddleware = func(req) {
----req.headers.set('token', tokenCache.get())
}
afterMiddleware = func (req, resp) {
----// 内部统一或者三方服务的公共状态码
---- if resp.statusCode == 401 {
--------// 上锁, 防止其他请求用到过期的 token, 也可以不锁, 看需求
--------tokenCache.lock()
--------resp = http.withOutMiddleware().post(refreshTokenUrl, {"token": refreshCache.get()})
--------refreshCache.set(resp.getRefreshToken())
--------tokenCache.unlock()
----}
}

http.addMiddleware(beforeMiddleware , afterMiddleware)
http.get(api)
freezebreze
2025 年 7 月 24 日
那就双话事人咯
HENQIGUAI
2025 年 7 月 24 日
token 时间给长点,比什么都好使。
cfer
2025 年 7 月 24 日
@skiy 国内大部分厂商都是验证 active-timeout 的,超过这个时间不活跃或者 token 过期就要求重新登录。
unco020511
2025 年 7 月 24 日
accessToken refreshToken
neal1986
2025 年 7 月 24 日
今年新項目有完成這個功能 全公司也沒人理解我在寫什麼 真搞笑
superfatboy
2025 年 7 月 25 日
我司用的是 accessToken refreshToken

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

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

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

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

© 2021 V2EX