fix: preserve login session across refreshes

This commit is contained in:
OpenClaw Agent
2026-09-22 04:48:06 +08:00
parent f8b5b585c9
commit 7b2c5f444b
3 changed files with 29 additions and 6 deletions
+17 -4
View File
@@ -122,17 +122,30 @@ func main() {
} else if !filepath.IsAbs(userFile) {
userFile = filepath.Join(root, userFile)
}
if err := os.MkdirAll(filepath.Dir(userFile), 0700); err != nil {
log.Fatal(err)
}
users := &auth.UserStore{Path: userFile}
if err := users.Load(mgr, cfg.UserHome); err != nil {
log.Fatal(err)
}
jwtSecret := cfg.JWTSecret
if jwtSecret == "" {
buf := make([]byte, 32)
if _, err := rand.Read(buf); err != nil {
log.Fatal(err)
// Keep sessions valid across process restarts. A random in-memory secret
// would invalidate every login whenever the service is restarted.
secretPath := userFile + ".jwt-secret"
if saved, err := os.ReadFile(secretPath); err == nil && len(strings.TrimSpace(string(saved))) >= 32 {
jwtSecret = strings.TrimSpace(string(saved))
} else {
buf := make([]byte, 32)
if _, err := rand.Read(buf); err != nil {
log.Fatal(err)
}
jwtSecret = hex.EncodeToString(buf)
if err := os.WriteFile(secretPath, []byte(jwtSecret+"\n"), 0600); err != nil {
log.Printf("warning: could not persist JWT secret at %s: %v", secretPath, err)
}
}
jwtSecret = hex.EncodeToString(buf)
}
for _, a := range mgr.Accounts {
if a.Home != "" {