Android

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

Trong bài trước, tôi đã giới thiệu Firebase Authentication và cách tích hợp nó vào trong Android, iOS và Web project của bạn, cũng như cho users sign up thông qua email và password. Trong bài này, tôi sẽ tiếp tục hướng dẫn tổng quát về sign up và sign in thông qua các nhà cung cấp bên ngoài, như Facebook, Twitter và Google.

FirebaseAuthentication

4. Tại sao bạn nên cân nhắc sử dụng authentication từ các nhà cung cấp bên ngoài?

Kể từ khi trào lưu mạng xã hội bùng nổ, từ “cư dân mạng” ra đời, thì tuyệt đại đa số các “cư dân mạng” đó đều có tài khoản mạng xã hội, mà đa phần là Facebook, cũng như dùng Gmail làm địa chỉ email chính. Với sức ảnh hưởng lớn và bành trướng của Facebook sang nhiều lĩnh vực, từ một mạng xã hội thuần túy chia sẻ các cảm xúc, hình ảnh, sang một (nhà cung cấp) nền tảng cho các nhà phát triển khác xây dựng các dịch vụ của mình trên nền tảng đó, và sự phổ biến của Google đến mức “google” đã trở thành một động từ trong nhiều ngôn ngữ, thì người dùng nào cũng có xu hướng thích sign up và sign in gián tiếp qua các tài khoản Facebook hoặc Google của mình. Đơn giản, họ chỉ cần kết nối với tài khoản Facebook hoặc Google trong trang web hoặc ứng dụng, họ sẽ bỏ qua rất nhiều bước phiền phức như điền địa chỉ email (có khi tới 2 lần), điền u-xơ-nem mong muốn, điền pát-uộc 2 lần, xác nhận qua email… Chỉ với 1-2 chạm là họ sẽ dễ dàng hoàn thành thao tác sign up, hoặc sign in.

Còn đối với các nhà phát triển, việc dùng nhờ authentication từ các ông lớn xanh dương hoặc bốn màu kia sẽ giảm bớt đi khá nhiều các trường thông tin trong cơ sở dữ liệu quản lí thành viên, cũng như có thể hướng người dùng đến ngay trang Facebook fanpage của tổ chức mình để họ có thể like ngay mà không phải đăng nhập lại. Như vậy, cả lập trình viên và người dùng đều có lợi với cách sign up / sign in này. Khá nhiều công ty khởi nghiệp (start ups) hiện tại còn “không thèm” tự thiết kế phương thức authentication của riêng mình, và hoàn toàn “nhờ vả” Facebook và Google.

5. Sử dụng Firebase Authentication gián tiếp trong ứng dụng của mình.

Thông thường, nếu bạn muốn dùng dịch vụ Authentication của Facebook, Twitter hay Google, thì bạn phải đăng kí với họ, và nhận được một mớ thông tin định danh loằng ngoằng. Và nếu bạn tích hợp bao nhiêu phương thức từ bao nhiêu nhà cung cấp, thì bạn có bấy nhiêu mớ kia để lưu trữ. Firebase Authentication ra đời đóng vai trò trung gian. Thay vì bạn đi theo hướng trực tiếp BẠN – NHÀ CUNG CẤP, bạn sẽ đi hướng gián tiếp BẠN – FIREBASE – NHÀ CUNG CẤP. Bạn sẽ chỉ chủ yếu “deal with” Firebase, phần còn lại thì “Ngọn lửa” sẽ lo hết.

Để thông báo với Firebase là bạn sẽ sử dụng dịch vụ Authentication gián tiếp của họ, bạn cần truy cập Firebase Console, mở project của bạn. Trong phần Authentication, bạn chọn SIGN-IN METHOD và cho Enable các nhà cung cấp mà bạn muốn.

FirebaseConsole08

Trong bài viết này, tôi sẽ chỉ hướng dẫn Firebase Authentication with Google Sign On và sơ lược về Anonymous auth. Đối với các nhà cung cấp khác như Facebook hay Twitter, bạn có thể làm tương tự theo hướng dẫn của các nhà cung cấp đó.

6. Google Authentication

6.1. Đối với Android:

Việc tích hợp Firebase Authentication with Google Sign On thực chất chính là việc tích hợp Google Sign On vào project Android của bạn. Nếu bạn đã làm việc này rồi, chẳng hạn như đã tích hợp nút SIGN IN WITH GOOGLE vào ứng dụng của bạn, thì bạn chỉ cần liên kết project hiện tại vào Firebase project và tạo các FirebaseAuth instances, gán events như bài trước. Còn nếu chưa, thì bạn cần yêu cầu Gradle compile thêm thư viện. Lưu ý là bạn đã phải đưa tập tin google-services.json vào project. Nếu chưa, xin xem lại Bài mở đầu.

Trong khi đợi Android Studio sync thư viện, bạn truy cập vào Google APIs Credential, yêu cầu, nhận và cóp Client ID (ở phần OAuth 2.0 client IDs) từ Firebase project của bạn. Khi Gradle đã sync xong, bạn khai báo và tạo 1 instance GoogleApiClient mGoogleApiClient trong Activity đăng nhập, từ đây trở xuống tôi sẽ gọi là SignInActivity. Bạn truyền vào Client ID mà bạn vừa cóp bên trên. Tiếp theo, bạn tạo các FirebaseAuth instances như FirebaseAuth mAuth và FirebaseAuth.AuthStateListener mAuthListener như bài trước và vận dụng là được:

6.2. Trên iOS, Swift.

Nếu bạn đã tích hợp nút Google Sign In (GIDSignInButton) vào ứng dụng thì bạn có thể quay lại bài trước và làm các events tương tự như vậy. Còn nếu không, bạn hãy thêm dòng dưới đây vào Podfile và cho install lại. Lưu ý là bạn cần tích hợp tập tin GoogleService-Info.plist vào project. Nếu chưa, vui lòng xem lại bài mở đầu.

Bạn thêm một custom URL Scheme vào project bằng cách mở project config, nhấn đúp tên project, chọn ứng dụng của bạn trong TARGETS, chọn tab Info và expand phần URL Types. Nhấn dấu cộng và thêm URL từ client ID. Client ID chính là giá trị của RESERVED_CLIENT_ID trong tập tin GoogleService-Info.plist. Cóp pát value này vào URL Schemes bên Xcode. Giao diện sẽ tương tự như dưới đây:

xcode_infotab_url_type_values

Tại AppDelegate.swift, bạn cho implements GIDSignInDelegate như sau:

Trong application:didFinishLaunchingWithOptions:, bạn luôn phải có hàm FIRApp.configure(), và thêm các delegates như bên dưới.

Tiếp tục, bạn cho implement application:openURL:options: với nội dung sau:

Trong app delegate, bạn implement GIDSignInDelegate protocol để handle quá trình sign in: (**)

Trong ViewController, bạn cho implement GIDSignInUIDelegate:

Trong hàm viewDidLoad, bạn thêm các dòng bên dưới:

Trong storyboard, bạn thêm nút GIDSignInButton. Do bạn đã get Google ID token (xem lại chỗ ** phía trên), nên bạn chỉ cần bắt sự kiện cho nó với các dòng sau:

 6.3. Với Web:

Các event sẽ được handle trong Javascript. Bạn vui lòng tham khảo bài viết trước để tìm hiểu về firebase.auth(). Ở đây tôi sẽ trình bày trường hợp đơn giản nhất.

Trước tiên, thêm một số thư viện JS của Firebase vào phần cuối của <body>:

Tiếp tục, ta tạo một instance của Google provider, vì ta đang dùng Google authentication:

Để đăng nhập với một pop-up, bạn dùng event sau:

Còn bạn muốn dùng luôn trang hiện tại bằng cách chuyển hướng nó qua accounts.google.com, (như cách Gmail, GDrive… sử dụng) sau khi người dùng đăng nhập xong thì Google tự chuyển hướng lại trang của bạn, thì hãy dùng event dưới đây.

Xong xuôi, không quá khó phải không?

7. Anonymous authentication.

Anonymous có nghĩa là ẩn danh. Khi người dùng đăng nhập dưới hình thức này, Firebase sẽ mở 1 temporary session cho họ thao tác. Sau khi session này được đóng, giả sử như họ chưa sign out, nếu ứng dụng Android hoặc iOS còn lưu lại dữ liệu định danh người dùng ở bộ cache, hoặc trình duyệt chưa bị xóa cache và cookies, thì khi truy cập lại sau một khoảng thời gian ngắn nhất định, Firebase sẽ mở lại session cho họ thao tác tiếp. Còn trong các trường hợp kia, thì mọi dữ liệu liên quan sẽ một đi không trở lại. Tất nhiên, Firebase có hỗ trợ để chuyển đổi từ anonymous user sang identified user, đơn giản là cho họ sign up và chuyển các temp data sang cơ sở dữ liệu “cứng”.

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.