如何提供用户名和用户名而不是电子邮件? [英] How to provide user login with a username and NOT an email?
问题描述
我想为我的网路应用程式使用Firebase,这个应用程式适用于护理院内的痴呆症患者。他们没有电子邮件或社交网络帐户,所以需要一个简单的用户名/密码注册/登录。
最简单的方法是什么?从文档中我可以看到,我不得不使用自定义的认证流程,但我没有一个现有的认证服务器。
如果我确实需要做这个提供令牌最简单的方法是什么?在Azure中有函数,而AWS有Lambda,但是我没有看到任何内容。Firebase
解决方案
在末尾添加一个虚拟域是一种的一个补丁,应该避免。
要启用用户名登录,只需执行以下简单步骤即可。
注册
在注册期间,请使用用户名,电子邮件和密码。用正常的电子邮件和密码注册用户。在它的成功保存电子邮件对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(), 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();
}
});
}
}
});
数据库 登录 检查用户是否输入了电子邮件或userId。如果是电子邮件ID,那么直接执行登录,否则获取与用户名关联的电子邮件ID并执行登录。
<数据库结构看起来像这样
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();
$ b $ //检查它是否是一个电子邮件或不
if(android.util.Patterns.EMAIL_ADDRESS.matcher(username).matches()){
performLogin(username,password);
} else {
/ /获取与用户名关联的emailId
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);
$ b @Override
public void onCancelled(FirebaseError firebaseError){
});
}
}
});
私人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();
}
@覆盖
public void onAuthenticationError(FirebaseError firebaseError){
Toast.makeText(getBaseContext(),firebaseError.toString(),Toast.LENGTH_SHORT).show();
}
} );
}
I'd like to use Firebase for my web app that is for people with dementia in a care home. They do not have email or social network accounts so will need a simple username / password sign up / sign in.
What is the easiest way to do this? From what I can see in the docs I'd have to use a custom auth flow but I do not have an existing auth server.
If I do need ot do this what is the easiest way to provide the token? In Azure there is Functions and AWS has Lambda but I see nothing here is Firebase
Appending a dummy domain at end is a kind of a patch up and should be avoided. To enable username login just follow these simple steps.
Sign Up
During sign up take the userid , email and password . Register the user with normal email and password. On Success of it save the email against the user_id in a separate node(branch).
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();
}
});
}
}
});
Database
Database structure will look like this
Login
Check if the user has entered an email or userId. If it is a email id then directly perform login with it otherwise fetch the email id associated with the username and perform login.
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();
}
});
}
这篇关于如何提供用户名和用户名而不是电子邮件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!