跳到主要内容

用户登录与认证

最后更新:2026 年 7 月 16 日

PlayServ 假定客户端在外部系统 —— 也就是你的身份提供方 —— 中完成用户认证,然后把拿到的 UserToken 传进 SDK。PlayServ 用这个 token 提升 Session 的权限,并把 Session 绑定到已有的用户档案,或者新建一个。

信息

在以下情况下使用这个流程:

  • Player 刚在你的 UI 里完成认证 —— 用户名密码、第三方登录等等
  • 应用启动时,你手上已经存有此前的 UserToken
  • token 已失效,你需要重新认证

登录流程​

1

在你的外部系统中认证 Player

Player 通过你的身份提供方登录 —— 用户名密码、社交账号,或你支持的任何其他方式。成功之后,你的系统签发一个 UserToken。

这一步不由 PlayServ 执行,它只消费你的系统产出的那个 token。

2

把 UserToken 传进 SDK

把 UserToken 交给 SDK,PlayServ 才能提升这个 Session 的权限。入口有两个,取决于你_什么时候_拿到 token —— Session 启动时用 Ready(UserToken),运行过程中用 Login(UserToken)。两者做的是同一件事。见下面的 Ready 与 Login。

3

PlayServ 校验并提升 Session

handshake 期间,PlayServ 会调用服务端的 ValidateClient(如果声明了的话)。校验通过,Session 权限被提升,Session 绑定到该 Player 的档案;校验不通过,客户端被拒。


Ready 与 Login:两个入口​

Ready(UserToken) 和 Login(UserToken) 做的是同样的权限提升 —— 区别只在时机。

如果用户此前已认证过、UserToken 也已存在本地,那就在启动 Session 时立刻把它传进去:

await PlayServ.Ready(UserToken);

因为提升发生在 Session 启动的那一刻,达到已认证状态会比之后再调 Login(...) 更快。


token 失效之后​

如果 Player 的会话结束,或者存下来的 token 失效了,Ready(UserToken) 处的 handshake 可能会返回错误。这时:

1

到外部系统重新认证

Player 在你的外部系统中重新认证,由它签发一个新的 UserToken。

2

用新 token 调用 Login

把新签发的 token 通过 Login(UserToken) 传进去,再次提升 Session 权限。


服务端校验:ValidateClient​

要在服务端校验已认证的客户端,PlayServ 会对 ValidateClient 发起一次 RPC 调用 —— 前提是它在服务端代码中已声明。返回 true 表示接受该客户端,返回 false 表示拒绝 —— 校验不通过时,客户端拿不到权限提升,并会被断开。

[Server]
public class ClientAuth
{
public bool ValidateClient(Session session)
{
// return true -> validation passed, privileges upgraded
// return false -> client denied / disconnected
return true;
}
}
注意

ValidateClient 就是 UserToken 有效性的把关点。请把这个方法当作你在服务端提升权限的那道闸门。


它与 handshake 和 Session 的关系​

  • Ready(UserToken) 影响 Session 启动时的 handshake 路径。
  • Login(UserToken) 做的是同样的权限提升,只是在运行过程中才发起。
  • Session 状态仍然是判断客户端运行时是否就绪的主要依据。

下一步​