无法获取Unity Firebase用户ID

时间:2019-12-30 16:51:58

标签: c# firebase unity3d firebase-realtime-database firebase-authentication

我正在尝试在创建用户后直接将用户数据保存到Firebase实时数据库。但是问题不是保存,而是用户ID。我保存还保存从CurrentUser获得的用户ID。然后我检查了实时数据库,发现存储的ID来自最近创建的最后一个用户。我通过获取当前用户电子邮件在编辑器中对其进行检查,它显示了最后一个用户电子邮件,而不是当前正在创建的当前用户。有人可以帮助我获取当前用户ID而不是最后一个用户ID。 你们可以从链接中看到图像。 What ID should be The last user ID showing up instead你们看到ID不匹配。我确实尝试过重做该项目,并查看Firebase本身的视频。我真的无所适从,现在被困了3天。

public void SaveNewUserInCode(string userId, string Name, string Email) {
    var currentUser = FirebaseAuth.DefaultInstance.CurrentUser;
    string userNameId;
    if (currentUser != null)
    {
        userNameId = currentUser.Email;
        user = new User(userId, Name, Email);
        string Json = JsonUtility.ToJson(user);
        reference.Child("Users").Child(currentUser.UserId).SetRawJsonValueAsync(Json);
        Data.text = userNameId;
    }

}

1 个答案:

答案 0 :(得分:1)

查看调用SaveNewUserInCode的代码会很有帮助。

我发现您发布的代码存在一些潜在危险:

第一个是任何调用(Auth.SignOut除外)都是异步的。如果您要在userId之后立即缓存Auth.SignInWithEmailAndPasswordAsync,则很可能使先前的用户仍在Auth.CurrentUser中(直到相关任务完成)。如果您认为这是问题所在,请参见my related post,以了解在Unity中等待任务的所有方式。

第二个,尤其是在Email有时为空的情况下,您可能会在每次应用启动时自动调用Auth.SignInAnonymouslyAsync(也许是旧逻辑,我通常从匿名用户启动我的原型,然后在需要时添加真实帐户做一些用户测试)。即使您之前曾匿名登录,该操作也会始终覆盖当前用户。在调用任何Auth.CurrentUser方法之前,应始终检查Auth.SignIn,但绝对要确保没有混乱的Auth.SignInAnonymouslyAsync

如果问题是线程问题,我相信以下逻辑将解决您的问题:

var auth = FirebaseAuth.DefaultInstance;
auth.SignInWithEmailAndPasswordAsync(email, password).ContinueWithOnMainThread(task => {
    // omitted : any error handling. Check task's state
    var user = task.Result;
    SaveNewUserInCode(user.UserId, user.DisplayName /* or however you get Name */, user.Email);
});