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()
.
- Necesita guardar el usuario y la contraseña en su base de datos o rtdb o firestore
- 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
-
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