Не срабатывает регистрация и авторизация по имени в приложении для Android: в чем причина?
Такая проблема: пытался реализовать регистрацию и авторизацию в приложении, но последняя должна проходить не по логину и паролю, а по имени. И вот, за неимением материалов, как это делать, пытался думать, как это реализовать. Написал код на странице регистрации и авторизации, чтобы записывались в БД данные имени, фамилии и email, но авторизацию нужно сделать по имени. Вот я и подставил в коде авторизации "authLI.signInWithCustomToken(firstNamelogin.getText().toString())" вместо "auth.signInWithEmailAndPassword()", и потерпел фиаско. Во-первых, в БД добавилась полностью пустая запись, ни имени, ни фамилии, ни имейла, а по имени она пользователя находить не может. Долго выбирал способ регистрации также, очевидно с имейлом и паролем мне не подходил, пытался настроить пользовательский вход по Open ID Connect, но не знаю, что туда писать. В общем подскажите, как внятно реализовать идею входа пользователя по имени (без пароля)?
Вот код Activity регистрации на Kotlin:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val firstName: EditText = findViewById(R.id.firstName)
val lastName: EditText = findViewById(R.id.lastName)
val email: EditText = findViewById(R.id.e_mail)
val loginButton_si: TextView = findViewById(R.id.login_text)
val signInButton: Button = findViewById(R.id.button)
val auth: FirebaseAuth
val db: FirebaseDatabase
val users: DatabaseReference
loginButton_si.setOnClickListener{
val intent = Intent(this,LoginActivity::class.java)
startActivity(intent)
}
auth = FirebaseAuth.getInstance()
db= FirebaseDatabase.getInstance()
users = db.getReference("Users")
signInButton.setOnClickListener {
if (TextUtils.isEmpty(firstName.getText().toString()) || TextUtils.isEmpty(lastName.getText().toString()) || TextUtils.isEmpty(email.getText().toString())) {
Toast.makeText(this, "Enter First name, Last Name and E-mail!", Toast.LENGTH_SHORT).show()
}
else{
auth.createUserWithEmailAndPassword(email.getText().toString(),"")
.addOnSuccessListener {
val user = User()
user.setFirstNameUser(firstName.getText().toString())
user.setLastnameUser(lastName.getText().toString())
user.setEmailUser(email.getText().toString())
users.child(user.getFirstNameUser()).setValue(user)
.addOnSuccessListener {
val intentAuth= Intent(this,Page1Activity::class.java)
startActivity(intentAuth)
}
}
}
}
}
}
Это код авторизации, который я пытался реализовать:
class LoginActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_log_in)
val firstNamelogin: EditText = findViewById(R.id.firstNameLI)
val btnLI: Button = findViewById(R.id.buttonLI)
val authLI: FirebaseAuth
val dbLI: FirebaseDatabase
val usersLI: DatabaseReference
authLI = FirebaseAuth.getInstance()
dbLI= FirebaseDatabase.getInstance()
usersLI = dbLI.getReference("Users")
btnLI.setOnClickListener {
if (TextUtils.isEmpty(firstNamelogin.getText().toString())) {
Toast.makeText(this, "Enter First name!", Toast.LENGTH_SHORT).show()
}
else{
authLI.signInWithCustomToken(firstNamelogin.getText().toString())
.addOnSuccessListener {
val intentLI= Intent(this,Page1Activity::class.java)
startActivity(intentLI)
finish()
}.addOnFailureListener {
Toast.makeText(this, "Wrong name or password", Toast.LENGTH_SHORT).show()
}
}
}
}
}
Это класс User на Java для моделирования данных пользователя (планирую его позже переконвертировать в Kotlin)
public class User {
private String firstNameUser, lastnameUser, emailUser;
public User(){}
public User(String firstNameUser, String lastnameUser, String emailUser) {
this.firstNameUser = firstNameUser;
this.lastnameUser = lastnameUser;
this.emailUser = emailUser;
}
public String getFirstNameUser() {
return firstNameUser;
}
public void setFirstNameUser(String firstNameUser) {
this.firstNameUser = firstNameUser;
}
public String getLastnameUser() {
return lastnameUser;
}
public void setLastnameUser(String lastnameUser) {
this.lastnameUser = lastnameUser;
}
public String getEmailUser() {
return emailUser;
}
public void setEmailUser(String emailUser) {
this.emailUser = emailUser;
}
}