【发布时间】:2019-04-14 17:31:17
【问题描述】:
我希望来宾用户登录,并在我的身份验证数据库上只创建 1 个新用户。
问题-
- -在 Unity 编辑器上-每次启动应用都会创建一个新的匿名用户
- 在 Android 上来宾用户保持登录状态,但当应用程序被卸载时,会创建另一个新的匿名用户
我的数据库只是充满了匿名用户。
注意-我确实使用-并检查监控身份验证状态
如何使用相同的匿名用户?我什至在考虑使用自定义令牌登录,并将其保存在用户的设备上——但是我需要在管理员端创建自己的 uid,并且不确定它是否可靠甚至是一个好的解决方案?
Firebase 似乎没有为此提供适当的解决方案。你会认为这是基本的。我错过了什么吗?
统一代码-
void InitializeFirebase()
{
Debug.Log("Setting up Firebase Auth");
auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
auth.StateChanged += AuthStateChanged;
AuthStateChanged(this, null);
}
void AuthStateChanged(object sender, System.EventArgs eventArgs)
{
if (auth.CurrentUser != user)
{
bool signedIn = user != auth.CurrentUser && auth.CurrentUser != null;
if (!signedIn && user != null)
{
Debug.Log("Signed out " + user.UserId);
}
user = auth.CurrentUser;
if (signedIn)
{
Debug.Log("Signed in " + user.UserId);
}
}
}
void OnDestroy()
{
auth.StateChanged -= AuthStateChanged;
auth = null;
}
public static void SignAnonymous()
{
auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
auth.SignInAnonymouslyAsync().ContinueWith(task => {
user = task.Result;
Debug.LogFormat("User signed in successfully: {0} ({1})",
user.DisplayName, user.UserId);
});
}
【问题讨论】:
-
如果您需要帮助找出您的方法不起作用的原因,请在您的问题中包含minimal code that reproduces the problem。这大大增加了人们发现问题所在的机会。
-
谢谢@FrankvanPuffelen!但我的问题不仅仅是代码相关。众所周知,当应用程序被卸载并再次安装(可能还有其他时间)时,Firebase 会创建新的匿名用户。我无法信任 firebase 或阻止它为设备创建新用户。它向我的数据库发送垃圾邮件。因此,我想自己管理它,并询问如何使用相同的匿名用户或另一种方法来为每个设备创建一个匿名用户。可以选择自定义令牌吗?我现在添加了我的代码
-
你在哪里打电话给
SignAnonymous?您应该只在用户尚未登录时调用它。尽管(如果我没记错的话)即使在用户已经登录时调用它也不应该创建新的 UID,而只是重新加载现有的 UID。我知道这可能不会发生的唯一情况是 SDK 无法将用户令牌本地存储在设备上。啊,我现在明白了,这正是你的第一颗子弹。 -
是的,我检查用户是否已登录-但在 Unity-editor 上,重新启动应用程序时它总是返回 false,在 Android 上卸载应用程序后它也会返回 false应用程序(我怀疑其他时候也是如此)因此匿名用户不是一个好的选择
-
Firebase 将其用户令牌保留在设备上。但是,当用户删除应用程序时,它当然会从那里擦除。使用您自己的自定义登录方法,您要将用户 ID/凭据保存在哪里,以免它们被擦除,但又不需要用户再次登录?
标签: firebase unity3d firebase-authentication google-cloud-functions