您可以通过修改身份验证服务器,在用户成功登录时生成自定义的签名令牌,将 Firebase Authentication 与自定义身份验证系统集成。您的应用会接收此令牌并将其用于 Firebase 身份验证。
准备工作
-
在使用 Firebase Authentication 之前,您需要:
- 在 Firebase 项目中注册 Unity 项目。
- 将 Firebase Unity SDK(具体而言是
FirebaseAuth.unitypackage
)添加到您的 Unity 项目中。
如需这些初始设置步骤的详细说明,请参阅将 Firebase 添加到您的 Unity 项目。
- 获取您项目的服务器密钥:
- 转到项目设置中的服务账号页面。
- 点击“服务账号”页面中 Firebase Admin SDK 部分底部的“生成新的私钥”。
- 新服务账号的公钥/私钥对会自动保存到您的计算机上。将此文件复制到您的身份验证服务器。
进行 Firebase 身份验证
FirebaseAuth
类是所有 API 调用都需要通过的门户,此类可通过 FirebaseAuth.DefaultInstance 访问。Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
使用来自身份验证服务器的令牌调用 Firebase.Auth.FirebaseAuth.SignInWithCustomTokenAsync
。
- 当用户登录您的应用时,将其登录凭据(例如,其用户名和密码)发送到您的身份验证服务器。您的服务器将检查凭据,并在凭据有效的情况下返回一个自定义令牌。
- 从身份验证服务器收到自定义令牌后,请将该令牌传递给
Firebase.Auth.FirebaseAuth.SignInWithCustomTokenAsync
以完成该用户的登录:auth.SignInWithCustomTokenAsync(custom_token).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("SignInWithCustomTokenAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SignInWithCustomTokenAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult result = task.Result; Debug.LogFormat("User signed in successfully: {0} ({1})", result.User.DisplayName, result.User.UserId); });
后续步骤
在用户首次登录后,系统会创建一个新的用户账号,并将其与该用户登录时使用的凭据(即用户名和密码、电话号码或者身份验证提供方信息)相关联。此新账号存储在您的 Firebase 项目中,无论用户采用何种方式登录,您项目中的每个应用都可以使用此账号来识别用户。
-
在您的应用中,您可以从
Firebase.Auth.FirebaseUser
对象获取用户的基本个人资料信息:Firebase.Auth.FirebaseUser user = auth.CurrentUser; if (user != null) { string name = user.DisplayName; string email = user.Email; System.Uri photo_url = user.PhotoUrl; // The user's Id, unique to the Firebase project. // Do NOT use this value to authenticate with your backend server, if you // have one; use User.TokenAsync() instead. string uid = user.UserId; }
在您的 Firebase Realtime Database 和 Cloud Storage 安全规则中,您可以从
auth
变量获取已登录用户的唯一用户 ID,然后利用此 ID 来控制用户可以访问哪些数据。
您可以通过将身份验证提供方凭据关联至现有用户账号,让用户可以使用多个身份验证提供方登录您的应用。
如需将用户退出登录,请调用 SignOut()
:
auth.SignOut();