Cómo devuelvo una lista de usuarios si uso la autenticación simple de nombre de usuario y contraseña de Firebase


No estoy seguro de si estoy haciendo algo mal, pero usando esta api https://www.firebase.com/docs/security/simple-login-email-password.html Puedo crear un usuario con éxito, de acuerdo con el mensaje de retorno, pero no puedo ver a ese usuario en ninguna parte de la consola de Forge. ¿Cómo sabes qué usuarios están registrados?

Debería tomar el ID de usuario de retorno y crear mi propio objeto de usuario en Firebase o esta duplicación es innecesaria. Necesito agregar algunas propiedades de usuario adicionales así que tal vez necesitaré hacer esto de todos modos.

Author: Frank van Puffelen, 2013-02-03

4 answers

Cuando se utiliza la autenticación de correo electrónico / contraseña en la Autenticación Firebase (anteriormente conocida como Firebase SimpleLogin), la combinación de correo electrónico y contraseña de su usuario se almacena de forma segura por separado de los datos realmente almacenados en su Firebase.

Esta barrera entre los datos en su Firebase y las combinaciones de hash de correo electrónico / contraseña de sus usuarios es por diseño: queremos que sea más fácil para usted (1) desarrollar su aplicación, (2) evitar cualquier fuga accidental de credenciales de usuario, y (3) aún le brinda total flexibilidad para almacenar sus datos de usuario en Firebase.

Eso significa que solo almacenamos la combinación de hash de dirección de correo electrónico / contraseña y nada más, por lo que depende de usted decidir cómo almacenar los datos reales del usuario en su Firebase. Como sugirió, debería tomar el id de usuario y almacenar esos datos en su Firebase en una ubicación como /users/id id, y usar el Lenguaje de Reglas de seguridad de Firebase para determinar el acceso de lectura / escritura a esos datos. De su usuario unique id y email ya están en la variable auth que usará al escribir reglas.

 64
Author: Rob DiMarco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-21 13:18:52

Aquí he creado un programa para Android para hacer lo que Rob dijo para firebase principiante (como yo) ahi.este programa primero almacena el nombre de usuario del usuario signedUp o signedIn y luego los muestra en una ListView

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);



}



}

Lista de usuarios.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);
    }
}

}

 9
Author: Mayank Wadhwa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-30 11:47:47

Puede usar Google Identity Toolkit API para obtener una lista de todos los usuarios registrados en su proyecto Firebase, esta API es utilizada por la CLI Firebase a la que se puede acceder ejecutando firebase auth:export results-file

Asegúrese de que la API del Kit de herramientas de identidad esté habilitada

Firebase-lista de usuarios.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
Author: Samir Aleido,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-27 22:25:52

Lista de usuarios en 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
Author: Duke79,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-23 16:18:47