Android

Firebase, Bài 1.1: Giới thiệu về Authentication.

Authentication là một phần không thể thiếu trong việc làm ứng dụng có web server làm hệ thống back-end. Trong thời buổi hiện tại, ngoài việc tạo trang sign up để người dùng đăng kí tài khoản trực tiếp trên server của bạn, bạn còn nên hỗ trợ thêm việc sign up / sign in qua các nhà cung cấp authentication khác, chẳng hạn như Google, Facebook hoặc Twitter. Việc tự xây dựng hệ thống đăng nhập không phải là khó, nhưng vấn đề bảo trì và bảo mật sẽ gây không ít khó khăn cho các bạn, đặc biệt là các bạn single developer hoặc các tổ chức có quy mô nhỏ. Với sự lớn mạnh của mình, Firebase team at Google cung cấp cho chúng ta một giải pháp (solution) rất dễ dàng và an toàn, đó chính là Firebase Authentication.

FirebaseAuthentication

1. Giới thiệu sơ lược về Firebase Authentication.

Firebase Authentication provides backend services, easy-to-use SDKs, and ready-made UI libraries to authenticate users to your app. It supports authentication using passwords, popular federated identity providers like Google, Facebook and Twitter, and more. Firebase Authentication integrates tightly with other Firebase services, and it leverages industry standards like OAuth 2.0 and OpenID Connect, so it can be easily integrated with your custom backend.

Không chỉ hỗ trợ User Authentication để liên kết với các dịch vụ khác của Firebase, Firebase Authentication vẫn cho phép bạn sử dụng cho hệ thống cơ sở dữ liệu riêng của bạn. Do đó, bạn không bắt buộc phải dùng tất cả các sản phẩm khác của Firebase như Analytics, Test Lab hay Notification thì vẫn có thể “dùng nhờ” Firebase Authentication được. Và tốt hơn hết, bạn nên thiết lập Authentication trước khi bắt đầu với các phần khác, chẳng hạn Realtime Database, để đảm bảo tính bảo mật cho cơ sở dữ liệu.

2. Tích hợp Firebase Authentication vào ứng dụng.

Để bắt đầu, bạn cần một Firebase project, và liên kết project đó với ứng dụng Android, iOS hoặc Web của bạn. Nếu bạn chưa biết cách, hãy tham khảo bài viết trước. Ở đây, tôi sẽ đi thẳng vào phần tích hợp Authentication. Trong Firebase Console, bạn mở project của bạn. Trong phần Authentication, bạn chọn SIGN-IN METHOD và cho Enable phần Email and Password. Bạn có thể bật các method khác như Google và Facebook để sử dụng trong bài sau.

FirebaseConsole08

Đối với Android, bạn cần yêu cầu compile các thư viện trong tập tin build.gradle:app, tức là thêm các dòng sau và cho Gradle sync lại:

Đối với iOS, ngoài Firebase/Core trong tập tin Podfile, bạn sẽ cần thêm bộ thư viện Firebase/Auth nữa. Tức là:

Đối với Web thì bạn không cần làm gì thêm, bởi các hàm sẽ được tự động gọi từ Google servers.

3. Đăng kí và đăng nhập với email và password.

Đầu tiên, chúng ta sẽ cho người dùng sign in với username và password theo kiểu thông thường. Về đăng nhập thông qua các nhà cung cấp như Google, Facebook và Twitter, tôi sẽ trình bày trong bài sau.

Đối với Android, bạn sẽ tạo cho tôi hai EditText, một cho UserEmail và một cho Password, và hai Button, một để Sign up và một để Sign in. Tương tự cho ứng dụng iOS với hai UITextField và và hai UIButton. Còn đối với ứng dụng web, ta chỉ cần tạo một form đăng nhập với hai text input và hai submit button. Tôi sẽ không đưa ra code đầy đủ mà chỉ hướng dẫn các bạn code trong các events.

3.1. Ứng dụng Android.

Tôi sẽ gọi hai EditText là mEmail và mPassword, hai Button là mSignUp và mSignIn. Trước tiên, bạn cần khai báo các field members sau:

Và khởi tạo chúng trong onCreate, và tốt nhất nên là sau super.onCreate(Bundle) và trước setContentView(int), như sau:

Đương nhiên, bạn sẽ liên kết mAuth và mAuthListener lại, tuy nhiên bạn không liên kết chúng trong onCreate, mà là onStart, để activity luôn kiểm tra tình trạng sign in của user mỗi khi nó quay lại trạng thái foreground, chứ không phải duy nhất mỗi lần khởi tạo đầu tiên.

Và tương ứng, trong onStop, bạn nên remove listener, để khi activity quay lại trạng thái foreground, việc gán lại event sẽ diễn ra dễ dàng hơn:

Bây giờ, ta sẽ chuyển qua phần sign up (đăng kí tài khoản mới cho người dùng), tức là event onClick của mSignUp. Bạn sẽ gọi FirebaseAuth#createUserWithEmailAndPassword(String email, String password) trong đó email và password tương ứng sẽ là text của mEmail và mPassword. mAuth sẽ là instance thực hiện công việc này.

Việc sign in đối với những users đã có tài khoản cũng tương tự, mAuth vẫn là instance thực hiện công việc, và hàm được gọi sẽ là FirebaseAuth#signInWithEmailAndPassword(String email, String password), cụ thể:

Để lấy các thông tin người dùng, chẳng hạn như email, display name và cả profile picture, để hiển thị, chẳng hạn như trong NavigationDrawer hay trong SettingsActivity, bạn sẽ dùng class FirebaseUser, ví dụ:

Để sign out, bạn chỉ đơn giản gọi

3.2. Ứng dụng iOS – Swift.

Bước đầu tiên, bạn phải luôn đảm bảo là FIRApp.configure() luôn có mặt ở vị trí hàng đầu trong hàm application:didFinishLaunchingWithOptions:. Nếu không, các instances của các class khác trong thư viện Firebase sẽ không hoạt động được.

Tôi tạm gọi các UITextField là emailField và passwordField. Hành động sign up và sign in trong ứng dụng iOS sẽ đơn giản hơn Android, vì ta không cần handle các activity life cycle methods. Ta có thể đặt một biến firebaseAuth để tiện dùng về sau:

Để sign up, bạn sẽ gọi hàm createUserWithEmail:email:password:completion: trong event của sign up button (chẳng hạn func didTapSignUp), cụ thể:

Và hoàn toàn tương tự cho sign in button event (chẳng hạn func didTapSignIn), lần này là hàm signInWithEmail:email:password:completion:, cụ thể:

Nếu bạn có sign out button thì đây là các code mà bạn sẽ viết trong event của nó.

Để lấy các thông tin người dùng, bạn sẽ dùng class FIRUser với instance là user, cụ thể như sau:

3.3. Ứng dụng Web.

Đối với ứng dụng web, tất nhiên mọi hoạt động sẽ diễn ra trong Javascript. Để thêm Firebase SDK đối với JS, bạn thêm các dòng sau ở phần cuối thẻ <body>:

Đối với function signUp(…), ta có các dòng code sau, và để đơn giản, ta đặt 1 biến lưu giá trị firebase.auth():

Còn đối với function signIn(…), thì code sẽ chỉ gồm:

Nếu bạn có làm một button sign out, thì fuction signOut(…) cần chứa:

Để log các thông tin của user ra console, ta có các hàm sau:

Trong bài viết tiếp theo, tôi sẽ hướng dẫn các bạn về sử dụng authentication từ các dịch vụ cung cấp bên ngoài, chẳng hạn Facebook, Twitter và Google.

2 thoughts on “Firebase, Bài 1.1: Giới thiệu về Authentication.”

  1. Tại sao em không thể gọi firebase.auth() được vậy ạ? Nó không tồn tại mặc dù em đã import rồi.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.