您可以使用 Firebase 身份验证让您的用户使用他们的电子邮件地址和密码通过 Firebase 进行身份验证,并管理您应用的基于密码的帐户。
在你开始之前
在使用Firebase Authentication之前,您需要:
注册您的 Unity 项目并将其配置为使用 Firebase。
如果您的 Unity 项目已经使用 Firebase,那么它已经针对 Firebase 进行了注册和配置。
如果您没有 Unity 项目,可以下载示例应用程序。
将Firebase Unity SDK (特别是
FirebaseAuth.unitypackage
)添加到您的 Unity 项目。
请注意,将 Firebase 添加到您的 Unity 项目涉及Firebase 控制台和您打开的 Unity 项目中的任务(例如,您从控制台下载 Firebase 配置文件,然后将它们移动到您的 Unity 项目中)。
访问Firebase.Auth.FirebaseAuth
类
FirebaseAuth
类是所有 API 调用的网关。它可以通过FirebaseAuth.DefaultInstance访问。Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
创建基于密码的帐户
要创建一个带密码的新用户帐户,请在您应用的登录代码中完成以下步骤:
- 当新用户使用您应用的注册表单注册时,请完成您的应用所需的所有新帐户验证步骤,例如验证新帐户的密码是否输入正确并满足您的复杂性要求。
- 通过将新用户的电子邮件地址和密码传递给
FirebaseAuth.CreateUserWithEmailAndPassword
来创建一个新帐户:auth.CreateUserWithEmailAndPasswordAsync(email, password).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("CreateUserWithEmailAndPasswordAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("CreateUserWithEmailAndPasswordAsync encountered an error: " + task.Exception); return; } // Firebase user has been created. Firebase.Auth.FirebaseUser newUser = task.Result; Debug.LogFormat("Firebase user created successfully: {0} ({1})", newUser.DisplayName, newUser.UserId); });
使用电子邮件地址和密码登录用户
使用密码登录用户的步骤与创建新帐户的步骤类似。在您应用的登录功能中,执行以下操作:
- 当用户登录您的应用时,将用户的电子邮件地址和密码传递给
FirebaseAuth.SignInWithEmailAndPassword
:auth.SignInWithEmailAndPasswordAsync(email, password).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("SignInWithEmailAndPasswordAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SignInWithEmailAndPasswordAsync encountered an error: " + task.Exception); return; } Firebase.Auth.FirebaseUser newUser = task.Result; Debug.LogFormat("User signed in successfully: {0} ({1})", newUser.DisplayName, newUser.UserId); });
- 您还可以像其他工作流程一样创建凭据并登录:
Firebase.Auth.Credential credential = Firebase.Auth.EmailAuthProvider.GetCredential(email, password); auth.SignInWithCredentialAsync(credential).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("SignInWithCredentialAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SignInWithCredentialAsync encountered an error: " + task.Exception); return; } Firebase.Auth.FirebaseUser newUser = task.Result; Debug.LogFormat("User signed in successfully: {0} ({1})", newUser.DisplayName, newUser.UserId); });
推荐:启用电子邮件枚举保护
如果电子邮件地址在必须注册时未注册(例如,使用电子邮件地址和密码登录时),或者在必须不使用时注册(例如,更改用户的电子邮件地址时)。虽然这有助于向用户建议具体的补救措施,但它也可能被恶意行为者滥用以发现用户注册的电子邮件地址。
为降低此风险,我们建议您使用 Google Cloud gcloud
工具为您的项目启用电子邮件枚举保护。请注意,启用此功能会更改 Firebase 身份验证的错误报告行为:确保您的应用不依赖于更具体的错误。
下一步
用户首次登录后,将创建一个新的用户帐户并将其链接到用户登录所用的凭据,即用户名和密码、电话号码或身份验证提供商信息。这个新帐户存储为您的 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 Security Rules中,您可以从
auth
变量中获取登录用户的唯一用户 ID,并使用它来控制用户可以访问的数据。
您可以允许用户使用多个身份验证提供程序登录您的应用程序,方法是将身份验证提供程序凭据链接到现有用户帐户。
要注销用户,请调用SignOut()
:
auth.SignOut();