Skip to content

升级到 1.2.0 后,已有的 Subsonic 媒体源连不上了 #418

Open

Description

@Vedaru

升级到 1.2.0 后,之前一直正常的 Subsonic/OpenSubsonic 媒体源变成“未连接”,点测试只提示“用户名或密码错误”。但同一组凭据在升级前后用 curl 请求 /rest/ping.view 都是 200,服务端没有动过。

排查后发现,1.1.0 保存的 encryptedPassword 是不带 safe:v1: 前缀的 base64 文本,1.2.0 直接按新的 safeStorage 格式去解密,结果解出来是乱码,最后就变成了“密码错误”。这里如果解密失败,最好直接提示需要重新填写凭据,而不是报认证失败,不然很容易误判。

另一个问题是 Linux 下没法重新保存。Electron 的 safeStorage.getSelectedStorageBackend() 返回 basic_text 时,encryptPassword() 会抛“请启用系统密钥环后保存流媒体密码”,但 isAsyncEncryptionAvailable() 仍然是 true。于是旧凭据读不了,新凭据也存不进去,只能手动改 streaming.json。

环境:

  • SPlayer Next 1.1.0 -> 1.2.0
  • Linux / Hyprland (Wayland)
  • Electron 44.9.0
  • gnome-keyring-daemon 在运行,但 Electron 仍选了 basic_text
  • 服务端 Lightweight Music Server (LMS),OpenSubsonic API

复现:

  1. 在 1.1.0 添加可用的 Subsonic 媒体源,确认能连接。
  2. 升级到 1.2.0 并重启。
  3. 媒体源显示未连接,测试连接报“用户名或密码错误”。
  4. 查看 streaming.json,encryptedPassword 是旧格式,没有 safe:v1: 前缀。
  5. 在界面重新输入同一个 token,仍然无法保存或连接。

期望:

  • 读取到旧格式时自动迁移,或者明确提示“需要重新输入凭据”。
  • 解密失败时给出清楚的错误,不要显示成用户名密码错误。
  • basic_text 模式下不要一边说可用、一边又拒绝保存。
  • 要么支持 basic_text(加安全提示),要么自动使用系统密钥环。

临时办法:
用主进程的 safeStorage.encryptStringAsync() 把 token 重新加密,写成 safe:v1:<base64>,重启后恢复。

服务端没有做任何改动,问题只在客户端的凭据迁移和 Linux 存储后端处理。

Activity

  1. github-actions commented on Oct 25, 2026

    @github-actions

    👋 @Vedaru

    感谢提交 Issue!我们已经收到您的反馈,会尽快确认您的问题。

    Thanks for opening this issue! We have received your report and will review it as soon as possible.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions