首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在中,createUser()不返回uid

在中,createUser()不返回uid
EN

Stack Overflow用户
提问于 2015-03-06 14:55:06
回答 2查看 1.3K关注 0票数 0

在使用Java时,我试图找出一种简洁而简单的方法,通过调用uid获得createUser()。这在使用Javascript (例如这个问题/答案)时很容易做到。我还在Firebase iOS API的上下文中看到了在Stackoverflow上提出的问题,这显然并不容易。我的问题是如何使用Firebase来实现它。具体来说,我的用例与iOS相关问题中的用例相同,即允许管理用户创建用户帐户(电子邮件/密码身份验证),并以uid作为密钥在Firebase中存储有关创建用户的其他信息。了解并使用uid作为密钥是至关重要的,因为它是安全规则的基础。

我已经看到了一些提出的解决方案,这两种解决方案都涉及到在创建新用户帐户之后执行的一些过程。这些是

无论哪种方式,我都有一个复杂的解决方案,其中包含多个异步回调,以处理在使用Javascript时非常琐碎的问题。

因此,我有三个具体问题:

  1. 目前有比我上面列出的两种方法更好的方法吗?
  2. 如果我使用第二种方法并以新创建的用户身份登录,难道这不就是超越管理令牌(即注销创建用户的管理员)吗?这就意味着新的安全规则适用了吗?
  3. 有没有人期望Android将在短期内升级,以便createUser() API与Javascript版本相同?

更新:深入挖掘并做一些实验,我找到了问题的答案。事实证明,Firebase提供的API文档已经过时和/或不一致。

Re Q1:根据用于createUser()的Javadoc,唯一可用的回调处理程序是Firebase.ResultHandler。但是,根据ChangelogAPI参考文件创建用户帐户上的文档,也可以使用Firebase.ValueResultHandler。这提供了对UID的直接访问。

Re Q2:答案是肯定的。对新创建的用户帐户进行身份验证将导致替换auth令牌。

Re Q3:真正的问题应该是“Firebase的人什么时候更新Javadoc?”或者一个更好的问题是“为什么在没有更新和准确文档的情况下发布新版本的SDK?”

EN

回答 2

Stack Overflow用户

发布于 2015-03-07 15:08:07

下面的代码是处理创建新用户的正确方法

代码语言:javascript
复制
Firebase ref = new Firebase("https://<YOUR-FIREBASE>.firebaseio.com");
    ref.createUser("harry@foo.com", "badPassword", new Firebase.ValueResultHandler<Map<String, Object>>() {

    public void onSuccess(Map<String, Object> result) {
        System.out.println("New account with uid: " + result.get("uid"));
    }

    public void onError(FirebaseError firebaseError) {
        // there was an error
    }
});

我更新了问题来解释原因。

票数 3
EN

Stack Overflow用户

发布于 2016-07-01 07:25:19

尝尝这个。这是最新的Google /O版的Firebase更新版,我不是在推广这个新版本,也不是把旧版本放下。我只是作为上述解决方案的另一种选择来说明这一点:

代码语言:javascript
复制
mAuth = FirebaseAuth.getInstance();

//creates the user with email and password...make this another type of login if you want
mAuth.createUserWithEmailAndPassword(mEmail, mPassword).addOnCompleteListener(signup.this, new OnCompleteListener<AuthResult>() {
    @Override
    public void onComplete(@NonNull Task<AuthResult> task) {
        if (task.isSuccessful()) {
            //do something
        }
    }
});

现在您可以添加一个AuthStateListener。您必须将代码放入onCreate、onStart和onStop方法中。请注意,上述代码可以采用任何合理的方法(例如,onCreate、onStart、onResume等)。我们开始:

代码语言:javascript
复制
FirebaseAuth mAuth;
FirebaseAuth.AuthStateListener mAuthListener;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_something);

    mAuth = FirebaseAuth.getInstance();
    mAuthListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user = firebaseAuth.getCurrentUser();
            if(user != null){
                //check for null to prevent NullPointerException when dealing with user
                if(!user.getUid().matches("")){
                    //make this check just in case...I've experienced unexplainable glitches here
                    String uid = user.getUid();
                    //do more stuff with Uid
                }
            }
        }
    }
}

@Override
public void onStart(){
    super.onStart();
    mAuth.addAuthStateListener(mAuthListener);
}

@Override
public void onStop(){
    super.onStop();
    if(mListener != null){
        mAuth.removeAuthStateListener(mAuthListener);
    }
}

最后,一旦创建了用户(同时注册了用户),mAuthListener就会进行回调(它执行mAuthListener中的任何内容,在本例中,这是获取用户的UID并使用它进行其他操作)。如果您需要在Android中使用这个新的Firebase,这里有一个帮助您的链接:https://firebase.google.com/docs/android/setup

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28901398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档