Вы можете использовать опцию «-add-modules = java.xml.bind» для добавления модуля привязки xml в среду выполнения JVM.
Например: «java --add-modules = java.xml.bind XmlTestClass "
Вы правы, что вход пользователя / пароль не поддерживается изначально в Firebase Auth в данный момент.
Обходной путь, который вы могли бы использовать без использования пользовательского auth с другим бэкэнд, - это принять имена пользователей в ваш пользовательский интерфейс, но в основной логике добавьте «@yourowndomain.com
» перед вызовом функций для регистрации или входа в систему по электронной почте.
Таким образом, вы будете использовать аутентификацию по электронной почте / паролю, отображение <username>
в <username>@yourowndomain.com
Вы также можете использовать решение Альфонса. И где вам нужно настоящее электронное письмо, вы можете установить текстовое поле для электронной почты, когда пользователь регистрируется, и вы можете сохранить его в своей базе данных, и вы можете использовать его.
Вы можете использовать sign in with custom token
Firebase дает вам полный контроль над аутентификацией, позволяя вам аутентифицировать пользователей или устройства с помощью защищенных JSON Web Tokens (JWT). Вы генерируете эти маркеры на своем сервере, передаете их обратно на клиентское устройство и затем используете их для аутентификации с помощью метода signInWithCustomToken()
.
signInWithCustomToken()
Более подробную информацию можно прочитать в этой документации
Добавление фиктивного домена в конец является своего рода исправлением и его следует избегать. Чтобы включить регистрацию имени пользователя, просто выполните следующие простые шаги.
Зарегистрироваться
Во время регистрации введите идентификатор пользователя, адрес электронной почты и пароль. Зарегистрируйте пользователя с обычной электронной почтой и паролем. При успешном его сохранении e-mail против user_id в отдельном узле (ветке).
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();
}
});
}
}
});
База данных
Структура базы данных будет выглядеть так
Вход
Проверьте, введен ли пользователь в адрес электронной почты или пользователя. Если это идентификатор электронной почты, то непосредственно выполнить вход с ним, в противном случае получить идентификатор электронной почты, связанный с именем пользователя, и выполнить вход в систему.
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 userId = dataSnapshot.getValue(String.class);
performLogin(userId,password);
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
}
}
});
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();
}
});
}