Bắt đầu xác thực Firebase trên Android

Kết nối ứng dụng với Firebase

Nếu bạn chưa thực hiện, hãy thêm Firebase vào dự án Android.

Thêm Firebase Authentication vào ứng dụng

  1. Trong tệp Gradle (ở cấp ứng dụng) của mô-đun (thường là <project>/<app-module>/build.gradle.kts hoặc <project>/<app-module>/build.gradle), hãy thêm phần phụ thuộc cho thư viện Firebase Authentication dành cho Android. Bạn nên sử dụng Firebase Android BoM để kiểm soát việc tạo phiên bản thư viện.

    dependencies {
        // Import the BoM for the Firebase platform
        implementation(platform("com.google.firebase:firebase-bom:33.7.0"))
    
        // Add the dependency for the Firebase Authentication library
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-auth")
    }

    Bằng cách sử dụng Firebase Android BoM, ứng dụng của bạn sẽ luôn sử dụng những phiên bản tương thích của thư viện Android trên Firebase.

    (Phương án thay thế)  Thêm các phần phụ thuộc thư viện Firebase mà không sử dụng BoM

    Nếu chọn không sử dụng Firebase BoM, bạn phải chỉ định từng phiên bản thư viện Firebase trong dòng phần phụ thuộc của thư viện đó.

    Xin lưu ý rằng nếu sử dụng nhiều thư viện Firebase trong ứng dụng, bạn nên sử dụng BoM để quản lý các phiên bản thư viện, nhằm đảm bảo tất cả phiên bản đều tương thích.

    dependencies {
        // Add the dependency for the Firebase Authentication library
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation("com.google.firebase:firebase-auth:23.1.0")
    }
    Bạn đang tìm kiếm mô-đun thư viện dành riêng cho Kotlin? Kể từ tháng 10 năm 2023 (Firebase BoM 32.5.0), cả nhà phát triển Kotlin và Java đều có thể phụ thuộc vào mô-đun thư viện chính (để biết thông tin chi tiết, hãy xem Câu hỏi thường gặp về sáng kiến này).

  2. Để sử dụng nhà cung cấp xác thực, bạn cần bật nhà cung cấp đó trong bảng điều khiển Firebase. Chuyển đến trang Phương thức đăng nhập trong phần Firebase Authentication để bật tính năng Đăng nhập bằng email/mật khẩu và bất kỳ nhà cung cấp danh tính nào khác mà bạn muốn cho ứng dụng của mình.

(Không bắt buộc) Tạo nguyên mẫu và kiểm thử bằng Firebase Local Emulator Suite

Trước khi nói về cách ứng dụng xác thực người dùng, hãy giới thiệu một bộ công cụ mà bạn có thể sử dụng để tạo bản mô hình và kiểm thử chức năng Authentication: Firebase Local Emulator Suite. Nếu bạn đang quyết định giữa các kỹ thuật và nhà cung cấp xác thực, thử nghiệm các mô hình dữ liệu khác nhau với dữ liệu công khai và riêng tư bằng AuthenticationFirebase Security Rules, hoặc tạo bản minh hoạ thiết kế giao diện người dùng đăng nhập, thì việc có thể làm việc cục bộ mà không cần triển khai dịch vụ trực tiếp có thể là một ý tưởng hay.

Trình mô phỏng Authentication là một phần của Local Emulator Suite, cho phép ứng dụng của bạn tương tác với nội dung và cấu hình cơ sở dữ liệu được mô phỏng, cũng như các tài nguyên dự án được mô phỏng (hàm, cơ sở dữ liệu khác và quy tắc bảo mật) nếu muốn.

Bạn chỉ cần thực hiện vài bước để sử dụng trình mô phỏng Authentication:

  1. Thêm một dòng mã vào cấu hình kiểm thử của ứng dụng để kết nối với trình mô phỏng.
  2. Chạy firebase emulators:start từ thư mục gốc của dự án cục bộ.
  3. Sử dụng giao diện người dùng Local Emulator Suite để tạo bản mô hình tương tác hoặc API REST của trình mô phỏng Authentication để kiểm thử không tương tác.

Bạn có thể xem hướng dẫn chi tiết tại phần Kết nối ứng dụng với trình mô phỏng Authentication. Để biết thêm thông tin, hãy xem phần giới thiệu về Local Emulator Suite.

Bây giờ, hãy tiếp tục tìm hiểu cách xác thực người dùng.

Kiểm tra trạng thái xác thực hiện tại

  1. Khai báo một thực thể của FirebaseAuth.

    Kotlin

    private lateinit var auth: FirebaseAuth

    Java

    private FirebaseAuth mAuth;
  2. Trong phương thức onCreate(), hãy khởi chạy thực thể FirebaseAuth.

    Kotlin

    // Initialize Firebase Auth
    auth = Firebase.auth

    Java

    // Initialize Firebase Auth
    mAuth = FirebaseAuth.getInstance();
  3. Khi khởi chạy Hoạt động, hãy kiểm tra xem người dùng hiện đã đăng nhập hay chưa.

    Kotlin

    public override fun onStart() {
        super.onStart()
        // Check if user is signed in (non-null) and update UI accordingly.
        val currentUser = auth.currentUser
        if (currentUser != null) {
            reload()
        }
    }

    Java

    @Override
    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
        if(currentUser != null){
            reload();
        }
    }

Đăng ký người dùng mới

Tạo một phương thức createAccount mới nhận địa chỉ email và mật khẩu, xác thực các thông tin này, sau đó tạo một người dùng mới bằng phương thức createUserWithEmailAndPassword.

Kotlin

auth.createUserWithEmailAndPassword(email, password)
    .addOnCompleteListener(this) { task ->
        if (task.isSuccessful) {
            // Sign in success, update UI with the signed-in user's information
            Log.d(TAG, "createUserWithEmail:success")
            val user = auth.currentUser
            updateUI(user)
        } else {
            // If sign in fails, display a message to the user.
            Log.w(TAG, "createUserWithEmail:failure", task.exception)
            Toast.makeText(
                baseContext,
                "Authentication failed.",
                Toast.LENGTH_SHORT,
            ).show()
            updateUI(null)
        }
    }

Java

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);
                }
            }
        });

Thêm một biểu mẫu để đăng ký người dùng mới bằng email và mật khẩu của họ, đồng thời gọi phương thức mới này khi biểu mẫu được gửi. Bạn có thể xem ví dụ trong mẫu bắt đầu nhanh của chúng tôi.

Đăng nhập người dùng hiện tại

Tạo một phương thức signIn mới nhận địa chỉ email và mật khẩu, xác thực các thông tin này, sau đó đăng nhập người dùng bằng phương thức signInWithEmailAndPassword.

Kotlin

auth.signInWithEmailAndPassword(email, password)
    .addOnCompleteListener(this) { task ->
        if (task.isSuccessful) {
            // Sign in success, update UI with the signed-in user's information
            Log.d(TAG, "signInWithEmail:success")
            val user = auth.currentUser
            updateUI(user)
        } else {
            // If sign in fails, display a message to the user.
            Log.w(TAG, "signInWithEmail:failure", task.exception)
            Toast.makeText(
                baseContext,
                "Authentication failed.",
                Toast.LENGTH_SHORT,
            ).show()
            updateUI(null)
        }
    }

Java

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);
                }
            }
        });

Thêm một biểu mẫu để người dùng đăng nhập bằng email và mật khẩu, đồng thời gọi phương thức mới này khi biểu mẫu được gửi. Bạn có thể xem ví dụ trong mẫu bắt đầu nhanh của chúng tôi.

Truy cập thông tin người dùng

Nếu người dùng đã đăng nhập thành công, bạn có thể lấy dữ liệu tài khoản của họ bất cứ lúc nào bằng phương thức getCurrentUser.

Kotlin

val user = Firebase.auth.currentUser
user?.let {
    // Name, email address, and profile photo Url
    val name = it.displayName
    val email = it.email
    val photoUrl = it.photoUrl

    // Check if user's email is verified
    val emailVerified = it.isEmailVerified

    // The user's ID, unique to the Firebase project. Do NOT use this value to
    // authenticate with your backend server, if you have one. Use
    // FirebaseUser.getIdToken() instead.
    val uid = it.uid
}

Java

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
    // Name, email address, and profile photo Url
    String name = user.getDisplayName();
    String email = user.getEmail();
    Uri photoUrl = user.getPhotoUrl();

    // Check if user's email is verified
    boolean emailVerified = user.isEmailVerified();

    // The user's ID, unique to the Firebase project. Do NOT use this value to
    // authenticate with your backend server, if you have one. Use
    // FirebaseUser.getIdToken() instead.
    String uid = user.getUid();
}

Các bước tiếp theo

Khám phá hướng dẫn về cách thêm các dịch vụ xác thực và danh tính khác: