Understanding createUser function of firebase(specifically android library)

微笑、不失礼 提交于 2019-12-22 08:16:05

问题


So I have the following code that I got from the firebase documentation (which I implemented in my app already and it's working fine):

    Firebase ref = new Firebase("https://myapp.firebaseio.com");
    ref.createUser("bobtony@firebase.com", "correcthorsebatterystaple", new Firebase.ValueResultHandler<Map<String, Object>>() {
       @Override
       public void onSuccess(Map<String, Object> result) {
          System.out.println("Successfully created user account with uid: " + result.get("uid"));
       }
       @Override
       public void onError(FirebaseError firebaseError) {
        // there was an error
       }
    });

after I create a user it prints on the console its uid. However, when I enter in my myapp.firebaseio.com there is nothing there.. So I have some questions:

  1. Where does firebase stores this new user created?
  2. How can I add some custom fields? (this functions uses just email and password) i.e Username

So, What I have tried to do was inside the onSuccess() I used ref.push() some values to myapp.firebaseio.com but then .. how can I check if the users uid created by the createUser() is the same as the one who I pushed? (the id's are differente!)

I hope my text it's clear, if isn't asked and I can try to explain again!

Thanks a bunch!


回答1:


User information is not stored inside your Firebase database. For anonymous and OAuth users, no information is stored anywhere. The information for email+password users is kept in a separate database that you don't have access to. The email+password users are visible in the Login & Auth tab of your dashboard of course, just not in your database.

If you want to store user information in your own Firebase database, you have to store it there yourself when you create or authenticate the user. There is a section on storing user data in the Firebase documentation that shows how to do this.

One advantage of having to store the information yourself, is that you get to determine exactly what is and what isn't stored.




回答2:


As Frank said; no user information is automatically put in the firebase itself on creating a user (have a look in Login&Auth in the dashboard sidebar instead). The new user is not even logged in after creation. This is the code I use to login and put a new user in the firebase when registering:

static void createUser(final String username, final String password) {

    final Firebase rootRef = new Firebase("YOUR_FIREBASE_URL");

    rootRef.createUser(
        username, 
        password, 
        new Firebase.ResultHandler() {
            @Override
            public void onSuccess() {
                // Great, we have a new user. Now log them in:
                rootRef.authWithPassword(
                    username, 
                    password,
                    new Firebase.AuthResultHandler() {
                        @Override
                        public void onAuthenticated(AuthData authData) {
                            // Great, the new user is logged in. 
                            // Create a node under "/users/uid/" and store some initial information, 
                            // where "uid" is the newly generated unique id for the user:
                            rootRef.child("users").child(authData.getUid()).child("status").setValue("New User");
                        }

                        @Override
                        public void onAuthenticationError(FirebaseError error) {
                            // Should hopefully not happen as we just created the user.
                        }
                    }
                );
            }

            @Override
            public void onError(FirebaseError firebaseError) {
                // Couldn't create the user, probably invalid email.
                // Show the error message and give them another chance.
            }
        }
    );
}

This is working well for me so far. I guess something could go wrong if the connection is interrupted right in the middle of everything (might end up with a user without it's initial info). Don't depend too much on it getting set...




回答3:


May be previous one deprecated as per Firebase . They are create new concept

//create user
                auth.createUserWithEmailAndPassword(email, password)
                        .addOnCompleteListener(SignupActivity.this, new OnCompleteListener<AuthResult>() {
                            @Override
                            public void onComplete(@NonNull Task<AuthResult> task) {
                                Toast.makeText(SignupActivity.this, "createUserWithEmail:onComplete:" + task.isSuccessful(), Toast.LENGTH_SHORT).show();
                                progressBar.setVisibility(View.GONE);
                                // If sign in fails, display a message to the user. If sign in succeeds
                                // the auth state listener will be notified and logic to handle the
                                // signed in user can be handled in the listener.
                                if (!task.isSuccessful()) {
                                    Toast.makeText(SignupActivity.this, "Authentication failed." + task.getException(),
                                            Toast.LENGTH_SHORT).show();
                                } else {
                                    Log.e("task",String.valueOf(task));

                                    getUserDetailse(auth);



                                }
                            }
                        });

/get user Detailse against FirebaseAuth auth/

 public static  void getUserDetailse(FirebaseAuth auth)
    {

        //
        auth.addAuthStateListener(new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull final FirebaseAuth firebaseAuth) {
                final FirebaseUser user = firebaseAuth.getCurrentUser();
                if (user != null) {
                    Log.i("AuthStateChanged", "User is signed in with uid: " + user.getUid());
                    String name = user.getDisplayName();
                    String email = user.getEmail();
                    Uri photoUrl = user.getPhotoUrl();

                    // 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
                    // FirebaseUser.getToken() instead.
                    String uid = user.getUid();
                    Log.e("user",name+email+photoUrl);

                } else {
                    Log.i("AuthStateChanged", "No user is signed in.");
                }
            }
        });

    }

check for detailse



来源:https://stackoverflow.com/questions/32490050/understanding-createuser-function-of-firebasespecifically-android-library

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!