MartialBE / one-api

OpenAI 接口管理 & 分发系统,改自songquanpeng/one-api。支持更多模型,加入统计页面,完善非openai模型的函数调用。
https://one-api-martialbe.vercel.app/
Apache License 2.0
814 stars 166 forks source link

Bug 反馈 - 遇到异常登出 #205

Closed nb5p closed 1 month ago

nb5p commented 1 month ago

例行检查

问题描述 经常登录后,没过多久就出现上述提示“错误:无权进行此操作,未登录且未提供 access token”,浏览器控制台无任何相关的异常报错,然后就需要我再次登录。 复现步骤 暂未发现稳定的复现步骤,很有可能与点击了”测试所有渠道“有关,确定后将补充。 预期结果 N/A 相关截图

nb5p commented 1 month ago

已确定和测试所有渠道有关系,大改在点击后10秒左右,切换界面就会遇到上方提示。

MartialBE commented 1 month ago

我没有复现出来这个问题。你有清除浏览器的cookies吗?

nb5p commented 1 month ago

抱歉,测试时没有用干净的环境,确实清除 Cookies 就正常了。我以为 Cookies 策略和同源策略的规则类似,起一个不同的端口,浏览器会当成新网站呢。这下又学到新知识了。

nb5p commented 1 month ago

前几天又购买/收集了一些渠道,今天再次遇到这个问题了,浏览器的 Incognito 模式下依然出现,应该与测试所有渠道有关系,实际上 Issue 中的提到的异常登出,是遇到了服务端崩溃,自动重启了服务,导致之前的 access token 过期。测试所有渠道时崩溃,下方为普通级别日志。

环境为:Docker martialbe/one-api:v0.9.1

...
[SYS] 2024/06/03 - 21:29:57 | 测试渠道 OpenRouter : openai/gpt-3.5-turbo 返回内容为:{"id":"gen-GJzCvMXXW1S1PLMMbgKj90qoJeh5","object":"chat.completion","created":1717421396,"model":"openai/gpt-3.5-turbo","choices":[{"index":0,"message":{"role":"assistant","content":"hi"},"finish_reason":"stop"}],"usage":{"prompt_tokens":17,"completion_tokens":1,"total_tokens":18}} 
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0xc56729]
goroutine 229 [running]:
one-api/controller.testAllChannels.func1()
    /home/runner/work/one-api/one-api/controller/channel-test.go:187 +0x369
created by one-api/controller.testAllChannels in goroutine 12
    /home/runner/work/one-api/one-api/controller/channel-test.go:152 +0x16e
[SYS] 2024/06/03 - 21:29:57 | One API v0.0.0 started 
[SYS] 2024/06/03 - 21:29:57 | SQL_DSN not set, using SQLite as database 
...

将 channel-test.go 的 187 行 DisableChannel 函数前增加下方判断,确实会在 OpenRouter 渠道的输出结果后,输出“err is nil”,建议检查下这里和 OpenRouter。

if err == nil {
    logger.SysLog("err is nil")
    continue
}
MartialBE commented 1 month ago

是的 这里确实有问题。 晚点修复一下 你服务重启之后需要重新登录的问题,是因为你没有设置session_secret, 在环境变量或者config.yaml中设置后,重启服务就不会登录失效了。

nb5p commented 1 month ago

经过多次测试,确实没有遇到崩溃。感谢作者的修复。