【问题标题】:what modifications needed to send verification email before creating user in firebase在firebase中创建用户之前需要进行哪些修改才能发送验证电子邮件
【发布时间】:2017-02-09 13:22:15
【问题描述】:

我是 android 应用程序开发的新手。我想在将用户的电子邮件添加到 firebase 之前发送一封验证电子邮件。下面的代码需要进行哪些修改,才能将验证电子邮件发送到用户的电子邮件。

package com.threemusketeers.healthmaster;

import android.app.ProgressDialog;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
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;
import com.google.firebase.auth.FirebaseUser;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

//defining view objects
private EditText editTextEmail;
private EditText editTextPassword;
private Button buttonSignup;
private ProgressDialog progressDialog;

private TextView textViewSignin;
;

//defining firebaseauth object
private FirebaseAuth firebaseAuth;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //initializing firebase auth object
    firebaseAuth = FirebaseAuth.getInstance();

    //if getCurrentUser does not returns null
    if (firebaseAuth.getCurrentUser() != null) {
        //that means user is already logged in
        //so close this activity
        finish();

        //and open profile activity
        startActivity(new Intent(getApplicationContext(), ProfileActivity.class));
    }

        //initializing views
        editTextEmail = (EditText) findViewById(R.id.editTextEmail);
        editTextPassword = (EditText) findViewById(R.id.editTextPassword);
        textViewSignin = (TextView) findViewById(R.id.textViewSignin);

        buttonSignup = (Button) findViewById(R.id.buttonSignup);

        progressDialog = new ProgressDialog(this);

        //attaching listener to button
        buttonSignup.setOnClickListener(this);
        textViewSignin.setOnClickListener(this);
    }

private void registerUser() {

    //getting email and password from edit texts
    String email = editTextEmail.getText().toString().trim();
    String password = editTextPassword.getText().toString().trim();

    //checking if email and passwords are empty
    if (TextUtils.isEmpty(email)) {
        Toast.makeText(this, "Please enter email", Toast.LENGTH_LONG).show();
        return;
    }

    if (TextUtils.isEmpty(password)) {
        Toast.makeText(this, "Please enter password", Toast.LENGTH_LONG).show();
        return;
    }

    //if the email and password are not empty
    //displaying a progress dialog

    progressDialog.setMessage("Registering Please Wait...");
    progressDialog.show();

    //creating a new user
    firebaseAuth.createUserWithEmailAndPassword(email, password)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {

                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    //checking if success
                    if (task.isSuccessful()) {
                        finish();
                        startActivity(new Intent(getApplicationContext(), ProfileActivity.class));
                        //Toast.makeText(MainActivity.this, "Successfully registered", Toast.LENGTH_LONG).show();
                    } else {
                        //display some message here
                        Toast.makeText(MainActivity.this, "Registration Error", Toast.LENGTH_LONG).show();
                    }
                    progressDialog.dismiss();
                }
            });

}

@Override
public void onClick(View view) {
    if(view == buttonSignup){
        registerUser();
    }

    if(view == textViewSignin){
        //open login activity when user taps on the already registered textview
        startActivity(new Intent(this, LoginActivity.class));
    }
}
}

【问题讨论】:

    标签: android android-studio firebase firebase-authentication


    【解决方案1】:

    使用新 API ('com.google.firebase:firebase-auth:9.6.1'),您可以使用:

    private void verifyEmail() {

    firebaseAuth.getCurrentUser().sendEmailVerification()
            .addOnCompleteListener(getActivity(), new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if (task.isSuccessful()) {
                        Toast.makeText(getActivity(), "Email sent", Toast.LENGTH_LONG).show();
                    }
                }
            });
    

    }

    【讨论】:

    • 我应该把这些代码放在哪里?我的意思是在哪一行之后?
    • 进入“firebaseAuth.createUserWithEmailAndPassword”任务成功
    • 可以在此处粘贴该行并发布整个代码吗?我是新手,所以没有足够的知识.......
    • 我不能在这里粘贴所有代码!试着自己把这段代码放到“firebaseAuth.createUserWithEmailAndPassword(email, password).Success”方法中
    • 告诉我应该在哪一行之后调用该方法......我是新手......所以我没有足够的知识
    【解决方案2】:
                    firebaseAuth.createUserWithEmailAndPassword(email, password)
                            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                                @Override
                                public void onComplete(@NonNull Task<AuthResult> task) {
                                    if (task.isSuccessful()) {
                                        final FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
                                        user.sendEmailVerification()
                                                .addOnCompleteListener(new OnCompleteListener<Void>() {
                                                    @Override
                                                    public void onComplete(@NonNull Task<Void> task) {
                                                        user.sendEmailVerification();
                                                        if (task.isSuccessful()) {
                                                            finish();
                                                            Toast.makeText(Register.this, "Registered Successfully. Check your email", Toast.LENGTH_SHORT).show();
                                                            startActivity(new Intent(getApplicationContext(), yourActivity.class));
                                                        }
                                                    }
                                                });
    
                                        if (firebaseAuth.getCurrentUser() != null) {
                                            finish();
                                            startActivity(new Intent(getApplicationContext(), yourActivity.class)); 
                                        }
                                    } else {
                                        Toast.makeText(Register.this, "Could not Register User. Try Again", Toast.LENGTH_SHORT).show();
                                    }
                                }
                            });
    

    【讨论】:

    • 验证时显示错误,并在将电子邮件 ID 添加到 Firebase 后发送验证电子邮件。我希望在将电子邮件 ID 添加到 Firebase 控制台之前发送验证。谢谢。
    • 连接稳定,应该是即时的。请显示您的错误详情...
    • 帐户是在验证过程之前创建的。但我想先验证电子邮件,然后将电子邮件添加到 Firebase。
    • 在那种情况下我要做的是:
    • 在注册活动中创建用户帐户。然后在登录活动中有一个语句,例如... user.isEmailVerified() 在条件语句中。例如)
    【解决方案3】:

    https://firebase.google.com/docs/reference/android/com/google/firebase/auth/UserInfo

    关于登录Activity...

    if(user.isEmailVerified){
    //allow to login app
    } else{
    //show toast, help, inform that account is not registered or no  stable internet connection
    }
    

    【讨论】:

      猜你喜欢
      • 2021-09-22
      • 2019-02-13
      • 2021-09-21
      • 2017-06-12
      • 1970-01-01
      • 2017-01-12
      • 2019-12-13
      • 2020-08-06
      • 2017-07-30
      相关资源
      最近更新 更多