【问题标题】:Verify every email address (Firebase)验证每个电子邮件地址 (Firebase)
【发布时间】:2019-06-20 13:53:12
【问题描述】:

我正在注册我的项目并使用 Firebase 进行身份验证。现在我希望我的代码只验证或验证那些已经由 gmail 或 yahoo 或 hotmail 创建的电子邮件地址。可以验证新的电子邮件地址。如果用户编写的电子邮件不是在 gmail 或 yahoo 或 hotmail 中创建的。它应该无法注册。 但是我的代码正在获取每个随机的电子邮件地址,无论它是否已经存在。在 firebase 身份验证表中,它也显示了该电子邮件地址。 现在我在验证每个电子邮件地址的代码中犯了什么错误。

代码:

package com.example.animation;

import android.content.Intent;
import android.graphics.Paint;
import android.graphics.drawable.AnimationDrawable;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;

public class Signup extends AppCompatActivity {
    RelativeLayout myLayout;
    AnimationDrawable animationDrawable;
    private EditText email_signup, password_signup, name_signup;
    private Button signup_btn;
    private FirebaseAuth firebaseAuth;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_signup);
        timing();
        setValues();
        TextView txt=findViewById(R.id.txt_signup);
      txt.setPaintFlags(txt.getPaintFlags()| Paint.UNDERLINE_TEXT_FLAG);
      firebaseAuth= FirebaseAuth.getInstance();
        signup_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(validate()){
                    // database
                    String user_email=email_signup.getText().toString().trim();
                    String user_password=password_signup.getText().toString().trim();
                    String user_name=name_signup.getText().toString().trim();

                    firebaseAuth.createUserWithEmailAndPassword(user_email,user_password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            if(task.isSuccessful())
                            {
                                Toast.makeText(Signup.this,"Registeration Successful",Toast.LENGTH_SHORT).show();
                                startActivity(new Intent(Signup.this,MainActivity.class));
                            }
                            else
                            {
                                Toast.makeText(Signup.this,"Not Successful",Toast.LENGTH_SHORT).show();
                            }

                        }
                    });
                }

            }
        });
    }
    private void timing(){
        myLayout=findViewById(R.id.signup_layout);
        animationDrawable=(AnimationDrawable)myLayout.getBackground();
        animationDrawable.setEnterFadeDuration(2500);
        animationDrawable.setExitFadeDuration(2500);
        animationDrawable.start();

    }

    private void setValues(){
        email_signup=findViewById(R.id.email_reg);
        password_signup=findViewById(R.id.pass_reg);
        name_signup=findViewById(R.id.namebox);
        signup_btn=findViewById(R.id.btn_register);


    }
    private Boolean validate(){
    Boolean result=false;
    String name=name_signup.getText().toString();
    String password=password_signup.getText().toString();
    String  email=email_signup.getText().toString();

    if(name.isEmpty()&& password.isEmpty()&&email.isEmpty()){

        Toast.makeText(this,"Please enter all Details",Toast.LENGTH_SHORT).show();
    }
    else{
        result=true;
    }
    return result;
    }
}

这是 firebase 身份验证表:

这是我注册的地方:

【问题讨论】:

  • 所以您想让用户使用任何电子邮件地址注册,但只能使用 gmail、yahoo 和 hotmail 登录,对吗?
  • 不,我希望用户使用已在 gmail、yahoo 或 hotmail 上创建的电子邮件地址进行注册。就像首先我将在 gmail (ajstyles25@gmail.com) 上创建 id 并且我希望当我在我的应用程序中注册并且这个 id 时它只注册这个电子邮件地址。现在,如果我正在写(ajstyle0900@gmail.com)它会接受它,我不想要它

标签: java android firebase firebase-authentication


【解决方案1】:

根据您的评论:

我希望用户使用已在 gmail、yahoo 或 hotmail 上创建的电子邮件地址进行注册。就像首先我将在 gmail (ajstyles25@gmail.com) 上创建 id 并且我希望当我在我的应用程序中注册并且这个 id 时它只注册这个电子邮件地址。现在,如果我正在写(ajstyle0900@gmail.com)它会接受它,我不想要它

要解决这个问题,您需要跟踪您的用户。这意味着您必须将用户的电子邮件地址保存在数据库中。为此,我向您推荐新的Cloud Firestore 数据库或Firebase realtime database。现在要检查 Cloud Firestore 中是否存在用户,请查看我在以下帖子中的回答:

要检查用户是否存在于 Firebase 实时数据库中,请查看我在以下帖子中的回答:

这样,只有当用户已经存在于数据库中时,你才能调用createUserWithEmailAndPassword()

【讨论】:

    猜你喜欢
    • 2014-06-12
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    • 2018-03-13
    • 2011-09-02
    • 2013-02-20
    • 2014-03-12
    • 1970-01-01
    相关资源
    最近更新 更多