How to return a list of users if I use a simple username and password for Firebase

Not sure if I am doing something wrong, but using this api https://www.firebase.com/docs/security/simple-login-email-password.html I can successfully create a user - according to the return message, but I do not see this user in the Forge console. How do you know what users are registered?

Should I take the ID of the returned user and create my own user object in Firebase, or is this duplication not necessary. I need to add some additional custom properties, so I still have to do this.

+54
firebase firebase-authentication
Feb 03 '13 at 14:49
source share
5 answers

When using email / password authentication in Firebase Authentication (formerly known as Firebase SimpleLogin), your email and user password combination are securely stored separately from the data actually stored in your Firebase.

This barrier between the data in your Firebase and the hash patterns of your users email and passwords by design: we want to simplify your (1) development of your application, (2) prevent any accidental leak of user credentials, and (3) still give you full flexibility in how to store your user data in Firebase.

This means that we only save the hash code of the email address / password and nothing else, so it's up to you how to store the actual user data in your Firebase. As you suggested, you should take the user ID and save this data in your Firebase in a place like / users / $ id, and use the Firebase Security Rules Language to determine read / write access to this data. Your user unique id and email already in the auth variable, which you will use when writing rules.

+69
Feb 03 '13 at 19:04 on
source share

Here I created an Android program to do what Rob said for a beginner newbie (like me) there. This program first saves the username of the signed-in user or the signedIn user, and then displays them in the View list

SignInActivity.java

 public class SignInActivity extends BaseActivity implements View.OnClickListener,View.OnKeyListener{ private DatabaseReference mDatabase; public static FirebaseAuth mAuth; private static final String TAG = "MainActivity"; EditText usernameField; EditText passwordField; TextView changeSignUpModeTextView; Button signUpButton; ImageView logo; RelativeLayout relativeLayout; Boolean signUpModeActive; static ArrayList<String> userList = new ArrayList<>(); @Override public void onStart() { super.onStart(); // Check auth on Activity start if (mAuth.getCurrentUser() != null) { onAuthSuccess(mAuth.getCurrentUser()); } } @Override public boolean onKey(View view, int i, KeyEvent keyEvent) { if(i == keyEvent.KEYCODE_ENTER && keyEvent.getAction() == keyEvent.ACTION_DOWN){ signUpOrLogIn(view); } return false; } @Override public void onClick(View view) { if(view.getId() == R.id.changeSignUpMode){ if (signUpModeActive == true){ signUpModeActive = false; changeSignUpModeTextView.setText("Sign Up"); signUpButton.setText("Log In"); }else{ signUpModeActive = true; changeSignUpModeTextView.setText("Log In"); signUpButton.setText("Sign Up"); } }else if(view.getId() == R.id.logo || view.getId() == R.id.relativeLayout){ InputMethodManager inm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); inm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),0); } } public void signUpOrLogIn(View view) { showProgressDialog(); String email = usernameField.getText().toString().trim(); String password = passwordField.getText().toString().trim(); if (signUpModeActive == true) { mAuth.createUserWithEmailAndPassword(email,password) .addOnCompleteListener(MainActivity.this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { hideProgressDialog(); Toast.makeText(MainActivity.this, "createUserWithEmail:onComplete:" + task.isSuccessful(), Toast.LENGTH_SHORT).show(); // 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(MainActivity.this, "Authentication failed." + task.getException().toString().substring(task.getException().toString().indexOf(" ")), Toast.LENGTH_SHORT).show(); Log.i("Error", task.getException().toString()); } else { onAuthSuccess(task.getResult().getUser()); showUserList(); } } }); } else { mAuth.signInWithEmailAndPassword(email,password) .addOnCompleteListener(MainActivity.this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { hideProgressDialog(); // 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()) { // there was an error Toast.makeText(MainActivity.this, task.getException().toString(), Toast.LENGTH_LONG).show(); } else { onAuthSuccess(task.getResult().getUser()); showUserList(); } } }); } } public void showUserList(){ startActivity(new Intent(getApplicationContext(), UserList.class)); finish(); } private void onAuthSuccess(FirebaseUser user) { String username = usernameFromEmail(user.getEmail()); // Write new user writeNewUser(user.getUid(), username, user.getEmail()); // Go to MainActivity } private String usernameFromEmail(String email) { if (email.contains("@")) { return email.split("@")[0]; } else { return email; } } private void writeNewUser(String userId, String name, String email) { User user = new User(name, email); mDatabase.child("users").child(userId).setValue(user); ArrayList<String> userNames = new ArrayList<>(); userNames.add(name); mDatabase.child("usernamelist").setValue(userNames); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mAuth = FirebaseAuth.getInstance(); mDatabase = FirebaseDatabase.getInstance().getReference(); if(mAuth.getCurrentUser()!=null){ showUserList(); } usernameField = (EditText) findViewById(R.id.username); passwordField = (EditText) findViewById(R.id.password); changeSignUpModeTextView = (TextView) findViewById(R.id.changeSignUpMode); signUpButton = (Button) findViewById(R.id.signupbutton); logo = (ImageView)findViewById(R.id.logo); relativeLayout= (RelativeLayout)findViewById(R.id.relativeLayout); signUpModeActive = true; changeSignUpModeTextView.setOnClickListener(this); usernameField.setOnKeyListener(this); passwordField.setOnKeyListener(this); logo.setOnClickListener(this); relativeLayout.setOnClickListener(this); } } 

UserList.java

 public class UserList extends AppCompatActivity { private static final String TAG = "UserList" ; private DatabaseReference userlistReference; private ValueEventListener mUserListListener; ArrayList<String> usernamelist = new ArrayList<>(); ArrayAdapter arrayAdapter;; ListView userListView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_user_list); userlistReference = FirebaseDatabase.getInstance().getReference().child("usernamelist"); onStart(); userListView = (ListView) findViewById(R.id.userlistview); } @Override protected void onStart() { super.onStart(); final ValueEventListener userListener = new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { usernamelist = new ArrayList<>((ArrayList) dataSnapshot.getValue()); usernamelist.remove(usernameOfCurrentUser()); Log.i(TAG, "onDataChange: "+usernamelist.toString()); arrayAdapter = new ArrayAdapter(UserList.this,android.R.layout.simple_list_item_1,usernamelist); userListView.setAdapter(arrayAdapter); } @Override public void onCancelled(DatabaseError databaseError) { Log.w(TAG, "onCancelled: ",databaseError.toException()); Toast.makeText(UserList.this, "Failed to load User list.", Toast.LENGTH_SHORT).show(); } }; userlistReference.addValueEventListener(userListener); mUserListListener = userListener; } public String usernameOfCurrentUser() { String email = MainActivity.mAuth.getCurrentUser().getEmail(); if (email.contains("@")) { return email.split("@")[0]; } else { return email; } } @Override public void onStop() { super.onStop(); // Remove post value event listener if (mUserListListener != null) { userlistReference.removeEventListener(mUserListListener); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case R.id.action_logout: FirebaseAuth.getInstance().signOut(); startActivity(new Intent(this, MainActivity.class)); finish(); return true; default: return super.onOptionsItemSelected(item); } } 

}

+10
Jul 30 '16 at 11:47
source share

You can use the Google Identity Toolkit API to get a list of all registered users in a Firebase project, this API is used by the Firebase CLI , which can be accessed by running firebase auth:export results-file

Verify that the Identity Toolkit API is enabled.

firebase-users-list.js

 const serviceAccount = require('path/to/firebase-sdk-json-service-account'); const googleapis = require('googleapis'); const identitytoolkit = googleapis.identitytoolkit('v3'); const authClient = new googleapis.auth.JWT( serviceAccount.client_email, null, serviceAccount.private_key, ['https://www.googleapis.com/auth/firebase'], null ); authClient.authorize((err) => { if (err) { return console.error(err); } let nextPageToken = undefined; let users = []; const getAccounts = () => identitytoolkit.relyingparty.downloadAccount({ auth: authClient, resource: { targetProjectId: serviceAccount.project_id, maxResults: 200, nextPageToken: nextPageToken } }, (e, results) => { if (e) { return console.error(err); } users = users.concat(results.users); if (results.nextPageToken) { nextPageToken = results.nextPageToken; return getAccounts(); } else { console.log(users); } }); getAccounts(); }); 
+4
Jul 27 '17 at 22:25
source share

List of users in python:

 from firebase_admin import credentials, db, auth cred = credentials.Certificate('\path\to\serviceAccountKey.json') default_app = firebase_admin.initialize_app(cred, { "databaseURL": "https://data_base_url.firebaseio.com" }) users = auth.list_users() 
0
Jul 23 '18 at 16:18
source share

You can use the cloud function to get a list of users (see Firebase-based documentation). Note that in the following example, the custom claims function is used to verify that the user has sufficient privileges.

 // USERS: return full users list for admin // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> import * as admin from 'firebase-admin' import * as functions from 'firebase-functions' export const listUsers = functions.https.onCall((data, context) => { // check if user is admin (true "admin" custom claim), return error if not const isAdmin = context.auth.token.admin === true if (!isAdmin) { return { error: 'Unauthorized.' } } return admin .auth() .listUsers() .then((listUsersResult) => { // go through users array, and deconstruct user objects down to required fields const result = listUsersResult.users.map((user) => { const { uid, email, photoURL, displayName, disabled } = user return { uid, email, photoURL, displayName, disabled } }) return { result } }) .catch((error) => { return { error: 'Error listing users' } }) }) 
0
May 07 '19 at 10:00
source share



All Articles