firebase-authentication

firebase authentication - ¿Cómo proporcionar al usuario un nombre de usuario y NO un correo electrónico?



firebase-authentication (4)

Agregar un dominio ficticio al final es una especie de parche y debe evitarse. Para habilitar el inicio de sesión con nombre de usuario, simplemente siga estos sencillos pasos.

Regístrate

Durante el registro tome el ID de usuario, correo electrónico y contraseña. Registre al usuario con correo electrónico y contraseña normales. En caso de éxito, guarde el correo electrónico contra el user_id en un nodo separado (rama).

mButtonSignUp.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(isValid()){ mProgressBar.setVisibility(View.VISIBLE); final String userId = mEditTextUserId.getText().toString(); final String emailId = mEditTextEmail.getText().toString() ; String password = mEditTextPassword.getText().toString() ; firebaseRef.createUser(emailId, password, new Firebase.ResultHandler() { @Override public void onSuccess() { firebaseRef.child("user_ids").child(userId).setValue(emailId); Toast.makeText(getBaseContext(),"You are successfully registered ",Toast.LENGTH_SHORT).show(); mProgressBar.setVisibility(View.GONE); } @Override public void onError(FirebaseError firebaseError) { mProgressBar.setVisibility(View.GONE); Toast.makeText(getBaseContext(),firebaseError.toString(),Toast.LENGTH_SHORT).show(); } }); } } });

Base de datos

La estructura de la base de datos se verá así

Iniciar sesión

Compruebe si el usuario ha ingresado un correo electrónico o ID de usuario. Si se trata de una identificación de correo electrónico, inicie sesión directamente con ella; de lo contrario, busque la identificación de correo electrónico asociada con el nombre de usuario e inicie sesión.

Button buttonLogIn = (Button)findViewById(R.id.button_login); buttonLogIn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mProgressBar.setVisibility(View.VISIBLE); String username = mEditTextEmail.getText().toString() ; final String password = mEditTextPassWord.getText().toString() ; // Check if it is an email or not if(android.util.Patterns.EMAIL_ADDRESS.matcher(username).matches()) { performLogin(username,password); }else{ //get the emailId associated with the username firebaseRef.child("user_ids").child(username) .addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { if(dataSnapshot!=null){ String userEmail = dataSnapshot.getValue(String.class); performLogin(userEmail,password); } } @Override public void onCancelled(FirebaseError firebaseError) { //Handle Error } }); } } });

private void performLogin(String emailId, String password) { firebaseRef.authWithPassword(emailId,password, new Firebase.AuthResultHandler() { @Override public void onAuthenticated(AuthData authData) { uid = authData.getUid() ; Toast.makeText(getBaseContext(), authData.toString(), Toast.LENGTH_SHORT).show(); } @Override public void onAuthenticationError(FirebaseError firebaseError) { Toast.makeText(getBaseContext(), firebaseError.toString(), Toast.LENGTH_SHORT).show(); } }); }

Me gustaría usar Firebase para mi aplicación web que es para personas con demencia en un hogar de ancianos. No tienen cuentas de correo electrónico o redes sociales, por lo que necesitarán un simple nombre de usuario / contraseña para registrarse / iniciar sesión.

¿Cuál es la forma más fácil de hacer esto? Por lo que puedo ver en los documentos, tendría que usar un flujo de autenticación personalizado, pero no tengo un servidor de autenticación existente.

Si necesito hacer esto, ¿cuál es la forma más fácil de proporcionar el token? En Azure hay funciones y AWS tiene Lambda, pero no veo nada aquí es Firebase


Puede usar sign in with custom token

Firebase le brinda un control completo sobre la autenticación al permitirle autenticar usuarios o dispositivos utilizando JSON Web Tokens (JWT) seguros. Genera estos tokens en su servidor, los devuelve a un dispositivo cliente y luego los usa para autenticarse mediante el método signInWithCustomToken() .

  1. Necesita guardar el usuario y la contraseña en su base de datos o rtdb o firestore
  2. Cuando el usuario toca el botón de inicio de sesión, el cliente enviará el nombre de usuario y la contraseña a su backend. Si el nombre de usuario y la contraseña son correctos, genere un token personalizado y envíelo de vuelta al cliente
  3. El cliente puede iniciar sesión con un token personalizado desde el servidor utilizando el método signInWithCustomToken()

Se pueden leer más detalles en esta documentación


También puede usar la solución de Alfonso. Y cuando necesite un correo electrónico real, puede establecer un campo de texto para un correo electrónico cuando el usuario se registre y puede mantenerlo en su base de datos y puede usarlo.


Tiene razón en que el inicio de sesión con nombre de usuario / contraseña no es compatible de forma nativa en Firebase Auth en este momento.

Una solución alternativa que podría tomar sin necesidad de usar autenticación personalizada con otro backend es aceptar nombres de usuario en su interfaz de usuario, pero en la lógica subyacente, agregue " @yourowndomain.com " antes de llamar a las funciones para registrarse o iniciar sesión con el correo electrónico.

Por lo tanto, estaría utilizando la autenticación de correo electrónico / contraseña, asignando <username> a <username>@yourowndomain.com