在 Android 上使用基于密码的帐号进行 Firebase 身份验证

借助 Firebase 身份验证,您可以让您的用户使用其电子邮件地址和密码进行 Firebase 身份验证,还可以管理您的应用的基于密码的帐号。

开始前的准备工作

  1. 将 Firebase 添加到您的 Android 项目中
  2. 将 Firebase 身份验证的依赖项添加到您的应用级 build.gradle 文件中:
    compile 'com.google.firebase:firebase-auth:11.6.2'
  3. 如果您尚未将自己的应用关联到您的 Firebase 项目,请在 Firebase 控制台中进行关联。
  4. 启用“电子邮件地址/密码”登录方法:
    1. Firebase 控制台中,打开身份验证 (Authentication) 部分。
    2. 登录方法标签中,启用电子邮件地址/密码登录方法,然后点击保存

创建一个基于密码的帐号

要创建一个带有密码的新用户帐号,请在您应用的登录 Activity 中完成以下步骤:

  1. 在您的注册 Activity 的 onCreate 方法中,获取 FirebaseAuth 对象的共享实例:
    private FirebaseAuth mAuth;
    // ...
    mAuth = FirebaseAuth.getInstance();
    
  2. 初始化您的 Activity 时,请检查用户当前是否已登录:
    @Override
    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
        updateUI(currentUser);
    }
    
  3. 当新用户使用应用的注册表单注册时,完成您的应用需要的所有新帐号验证步骤,例如验证新帐号的密码是否输入正确,是否符合您的密码复杂度要求。
  4. 通过将新用户的电子邮件地址和密码传递给 createUserWithEmailAndPassword 来创建一个新帐号:
    mAuth.createUserWithEmailAndPassword(email, password)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "createUserWithEmail:success");
                        FirebaseUser user = mAuth.getCurrentUser();
                        updateUI(user);
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "createUserWithEmail:failure", task.getException());
                        Toast.makeText(EmailPasswordActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        updateUI(null);
                    }
    
                    // ...
                }
            });
    
    新帐号创建后,该用户也会登录。在回调中,您可以使用 getCurrentUser 方法来获取用户的帐号数据。

使用电子邮件地址和密码让用户登录

使用密码让用户登录的步骤与创建新帐号的步骤类似。在您的应用的登录 Activity 中,执行以下操作:

  1. 在您的登录 Activity 的 onCreate 方法中,获取 FirebaseAuth 对象的共享实例:
    private FirebaseAuth mAuth;
    // ...
    mAuth = FirebaseAuth.getInstance();
    
  2. 初始化您的 Activity 时,请检查用户当前是否已登录:
    @Override
    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
        updateUI(currentUser);
    }
    
  3. 当用户登录到您的应用时,将该用户的电子邮件地址和密码传递给 signInWithEmailAndPassword
    mAuth.signInWithEmailAndPassword(email, password)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "signInWithEmail:success");
                        FirebaseUser user = mAuth.getCurrentUser();
                        updateUI(user);
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "signInWithEmail:failure", task.getException());
                        Toast.makeText(EmailPasswordActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        updateUI(null);
                    }
    
                    // ...
                }
            });
    
    如果登录成功,您可以使用返回的 FirebaseUser 继续操作。

后续步骤

在用户首次登录后,系统会创建一个新的用户帐号,并将其与该用户登录时使用的凭据(即用户名和密码、电话号码或者身份验证提供方信息)相关联。此新帐号存储在您的 Firebase 项目中,您项目中的每个应用都可以使用此帐号来识别用户,而不管用户采用何种登录方式。

  • 在您的应用中,您可以从 FirebaseUser 对象获取用户的个人资料基本信息。请参阅管理用户

  • 在您的 Firebase 实时数据库和 Cloud Storage 安全规则中,您可以从 auth 变量中获取已登录用户的唯一用户 ID,然后用此 ID 来控制用户可以访问哪些数据。

您可以允许用户通过多种身份验证提供方服务登录您的应用,只需将多个身份验证提供方凭据关联至现有用户帐号即可。

要让用户退出登录,可调用 signOut

FirebaseAuth.getInstance().signOut();

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面