跳转至

Memos 浏览器后台私有内容消失问题分析与解决方案

问题描述

当浏览器打开 Memos 时可以获取全部数据,但浏览器挂后台过久后再次打开,私有内容会消失,只显示公开内容。需要手动刷新页面才能重新获取全部数据。

问题原因

Memos 使用 JWT (JSON Web Token) 进行身份验证,默认的 Access Token 有效期为 15 分钟

Token 类型说明

Token 类型 有效期 用途
Access Token 15 分钟 API 访问认证
Refresh Token 30 天 获取新的 Access Token

认证流程

当浏览器挂后台超过 15 分钟后: 1. Access Token 过期 2. 前端尝试使用过期的 token 访问 API 3. 服务器验证失败,返回未认证状态 4. 前端只能获取公开内容(不需要认证),私有内容无法显示

源码位置

  • server/auth/token.go:34 - Access Token 过期时间定义
  • server/auth/authenticator.go - 认证逻辑
  • web/src/contexts/AuthContext.tsx - 前端认证状态管理

解决方案

方案 1:延长 Access Token 有效期(需要修改源码)

编辑 server/auth/token.go 文件:

// 将 15 分钟改为更长的时间,比如 24 小时
AccessTokenDuration = 24 * time.Hour

然后重新编译:

# 如果使用 Docker
docker build -t your-memos-image .

# 如果使用二进制
go build ./cmd/memos

优点: 简单直接 缺点: 降低安全性(token 长期有效),需要重新编译


方案 2:实现前端自动刷新 Token(推荐)

Memos 已经有 Refresh Token 机制(30 天有效),但前端目前没有实现自动刷新逻辑。

需要修改前端代码,在 Access Token 过期前自动使用 Refresh Token 获取新的 Access Token。

优点: 安全性高,无需重新编译后端 缺点: 需要修改前端代码


方案 3:临时缓解方案

  1. 在浏览器设置中保持页面活跃 - 避免进入省电模式
  2. 手动刷新页面 - 当看到数据不完整时
  3. 使用 PWA 安装到桌面 - 可能有助于保持会话

环境变量配置(如可用)

检查是否有新增的 JWT 过期时间配置环境变量(需要在最新版本中确认):

# 示例(请查看实际文档确认)
MEMOS_JWT_ACCESS_TOKEN_DURATION=24h

参考资源

更新日期

2026-02-02