版本二收尾
前几天写的是大功能,角色和语言。这一篇是跟在后面的扫帚,把版本二好好收尾的那些小事。

开着深色主题的中文版首页。还是那座岛。
变更清单自夏天以来第一次清空了。版本二的每一块都已经上线、验证、归档:描述各部分应当如何工作的规格说明现在都放在一个库里,一共十九项能力,下次我再想"等等,我当时对保留期是怎么定的",答案是写下来的,而不是存在我脑子里。
还有一个值得单独一段的修复,因为在弄明白之前它烦了我好几个星期:网站总是把我登出。差不多每十五分钟一次,掉线,重新登录。本该让会话存活三十天的刷新令牌一直都在,躺在一个作用域限定为 /auth 路径的 Cookie 里,也就是说浏览器只在 auth 请求上发送它。普通的页面访问从来不带它,所以每次加载页面都会运行的静默续期根本无米下锅。修复归根结底就是一行:
return &http.Cookie{
Name: "refresh_token",
Value: rawToken,
Path: "/", // was "/auth", which the browser never sent on page visits
HttpOnly: true,
Secure: s.CookieSecure,
SameSite: http.SameSiteStrictMode,
}一行改完,然后是经典的第二幕:修复的第一版把我的测试服务器搞崩了。Cookie 到处可见之后,续期逻辑在处理 auth 请求本身时也会触发,进而触发下一次续期,再下一次。无限循环,内存耗尽,服务器阵亡。防护也加上了,而且我特意测了那个确切场景:会话令牌过期,加载页面,依然在线。
所以如果这个网站以前总在你写评论写到一半时把你登出:现在应该不会了。登录一次,就一直在。