如何提供用户名和用户名而不是电子邮件? [英] How to provide user login with a username and NOT an email?

查看:222
本文介绍了如何提供用户名和用户名而不是电子邮件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想为我的网路应用程式使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆