ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

SpacetimeDB 客户端因使用其他服务器签发的令牌被拒绝连接怎么排查

SpacetimeDB 客户端因使用其他服务器签发的令牌被拒绝连接怎么排查 SpacetimeDB 客户端因使用其他服务器签发的令牌被拒绝连接怎么排查【免费下载链接】SpacetimeDBDevelopment at the speed of light项目地址: https://gitcode.com/GitHub_Trending/sp/SpacetimeDB应用里的 SpacetimeDB 客户端连不上数据库连接建立后立即失败或被断开而服务器本身是正常运行的这是故障排查文档中 Client connection rejected 一节描述的情况。文档给出的最可能原因是客户端在连接时提供了另一个 SpacetimeDB 服务器签发的令牌或者该令牌已过期。本文按“确认现象 → 定位保存的令牌 → 清除 → 重连验证”的顺序给出各语言 SDK 对应的具体操作位置。为什么别的服务器的令牌会被拒绝要理解根因先看令牌是怎么来的见Authentication 文档客户端不带令牌连接时SpacetimeDB 会为它创建一个新的 identity并返回一个 server-issued token。如果想让之后的连接继续使用这个身份需要把这个 token 持久化下来在重连时通过 SDK 传回例如 Rust 的with_token。server-issued token 只由签发它的服务器识别。教程中也有明确说明spacetime login --server-issued-login local得到的身份“由你的本地服务器直接签发令牌丢失后不可恢复且只被签发它的服务器认可”。服务器的签名密钥可能发生变化文档指出的常见原因是服务器被重置。此时旧令牌同样会失效。所以当你的应用保存过某个服务器的令牌、之后却指向了另一台服务器或原服务器被重置过服务器就会拒绝这次连接。先确认连接确实是被拒绝故障排查文档在 Connection completely unresponsive 一节中区分了两种情况连接被拒绝rejected与连接没有推进not advancing。要确认属于前者在构建DbConnection时注册回调并检查它们是否带着错误被调用on_connect_error/onConnectError/OnConnectError连接被拒绝或主机不可达时触发on_disconnect/onDisconnect/OnDisconnect连接结束时触发。如果只有on_disconnect在连接启动后不久被调用且on_connect_error带错误才符合本文描述的“令牌被拒绝”场景如果连接一直没有任何响应那是另一类问题需要调用run_threaded、FrameTick等方法推进连接不在此处展开。找到并清除客户端保存的令牌确认问题后按你使用的 SDK 清除无效令牌。以下位置均来自故障排查文档的 Client connection rejected 一节客户端 SDK清除方式Rustnative从~/.spacetimedb_client_credentials中删除你应用的凭证文件。查看代码里构建spacetimedb_sdk::credentials::File的位置确定要删的是哪一个文件C#native从应用保存的设置中删除auth_token这一行默认位于~/.spacetime_csharp_sdk/settings.ini。查看你对AuthToken.Init的调用确定实际的目录和/或文件名TypeScript、Rust 或 C#browser清除 cookiesUnity通过Edit - Clear All PlayerPrefs清除 PlayerPrefsUnreal删除 Unreal 项目中的文件Saved/Config/WindowsEditor/GameUserSettings.ini两个定位提示C# 的AuthToken辅助类默认把配置存放在用户主目录下的.spacetime_csharp_sdk/settings.ini令牌以auth_token前缀写入见 AuthToken.cs如果你调用了AuthToken.Init传入自定义目录或文件名实际位置以调用为准。Rust SDK 的File::save/File::load默认也在$HOME/.spacetimedb_client_credentials/下读写凭证具体文件名取决于你的构建代码。注意清除的副作用删除后客户端不再持有旧的 identity。根据Authentication 文档不带令牌连接会让 SpacetimeDB 创建一个新的identity 并返回新的 server-issued token即用户会换成一个新身份而不是恢复旧身份。重新连接并验证清除令牌后让客户端不带令牌重新连接服务器会签发新的令牌。此时把返回的长期令牌持久化供后续重连使用Ruston_connect回调会收到一个可保存的私有访问 token之后通过with_token传回见 Rust SDK 参考C#可用AuthToken.SaveToken(token)保存下次连接时读取保存的是长期 server-issued token。Authentication 文档特别强调不要用它收到的短期 WebSocket token覆盖已保存的长期令牌——在无法设置 WebSocket 自定义头的平台如 Unity WebGLSDK 会先用保存的长期令牌换取一个短期 WebSocket token这个短期令牌只用于本次握手。验证方式连接建立后on_connect回调被触发、on_connect_error/on_disconnect不再出现错误功能调用与订阅恢复正常。如果需要单独核对某个 identity 与令牌是否被服务器接受HTTP identity API 提供了GET /v1/identity/:identity/verify端点请求头需携带AuthorizationSpacetime token 的 Bearer 编码返回204 No Content表示令牌有效且与该 identity 匹配400 Bad Request表示令牌有效但不匹配该 identity401 Unauthorized表示令牌无效或没有携带Authorization头。相关信号与限制如果同一个令牌被用于 CLI 操作并出现Invalid Token: InvalidSignature错误文档将其归因为同一类根因该令牌来自另一台服务器的--server-issued-login或服务器签名密钥已变更通常因服务器重置。这可以作为交叉确认手段。CLI 侧的修复spacetime logout后重新spacetime login属于另一条排查路径见故障排查文档的 CLI login not accepted by server 一节本文不展开。服务器重置会变更签名密钥导致此前签发的令牌全部失效换服务器部署或迁移后旧客户端上保存的令牌需要按上面各 SDK 的位置重新清除。令牌过期与“来自其他服务器”的令牌走的是同一条清除路径文档将两者并列为该症状的最可能原因不需要单独区分。【免费下载链接】SpacetimeDBDevelopment at the speed of light项目地址: https://gitcode.com/GitHub_Trending/sp/SpacetimeDB创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表