Bạn có thể cho phép người dùng xác thực bằng Firebase thông qua tài khoản Facebook của họ bằng cách tích hợp tính năng Đăng nhập bằng Facebook vào ứng dụng. Bạn có thể tích hợp tính năng Đăng nhập bằng Facebook bằng cách sử dụng Firebase SDK để thực hiện quy trình đăng nhập hoặc bằng cách thực hiện quy trình Đăng nhập bằng Facebook theo cách thủ công và truyền mã truy cập thu được cho Firebase.
Trước khi bắt đầu
- Thêm Firebase vào dự án JavaScript.
- Trên trang web Facebook for Developers, hãy lấy App ID và App Secret cho ứng dụng của bạn.
- Bật tính năng Đăng nhập bằng Facebook:
- Trong bảng điều khiển Firebase, hãy mở mục Xác thực.
- Trên thẻ Phương thức đăng nhập, hãy bật phương thức đăng nhập Facebook và chỉ định Mã ứng dụng và Khoá bí mật của ứng dụng mà bạn nhận được từ Facebook.
- Sau đó, hãy đảm bảo rằng URI chuyển hướng OAuth (ví dụ:
my-app-12345.firebaseapp.com/__/auth/handler
) được liệt kê là một trong các URI chuyển hướng OAuth trong trang cài đặt ứng dụng Facebook của bạn trên trang web Facebook for Developers trong cấu hình Product Settings > Facebook Login (Cài đặt sản phẩm > Đăng nhập bằng Facebook).
Xử lý quy trình đăng nhập bằng Firebase SDK
Nếu đang tạo một ứng dụng web, cách dễ nhất để xác thực người dùng bằng Firebase thông qua tài khoản Facebook của họ là xử lý quy trình đăng nhập bằng Firebase JavaScript SDK. (Nếu muốn xác thực người dùng trong Node.js hoặc môi trường không phải trình duyệt khác, bạn phải xử lý quy trình đăng nhập theo cách thủ công.)
Để xử lý quy trình đăng nhập bằng Firebase JavaScript SDK, hãy làm theo các bước sau:
- Tạo một thực thể của đối tượng nhà cung cấp Facebook:
Web
import { FacebookAuthProvider } from "firebase/auth"; const provider = new FacebookAuthProvider();
Web
var provider = new firebase.auth.FacebookAuthProvider();
- Không bắt buộc: Chỉ định các phạm vi OAuth 2.0 bổ sung mà bạn muốn yêu cầu từ trình cung cấp dịch vụ xác thực. Để thêm một phạm vi, hãy gọi
addScope
. Ví dụ:Web
provider.addScope('user_birthday');
Web
provider.addScope('user_birthday');
- Không bắt buộc: Để bản địa hoá quy trình OAuth của nhà cung cấp theo ngôn ngữ mà người dùng ưu tiên mà không cần truyền rõ ràng các tham số OAuth tuỳ chỉnh có liên quan, hãy cập nhật mã ngôn ngữ trên thực thể Auth trước khi bắt đầu quy trình OAuth. Ví dụ:
Web
import { getAuth } from "firebase/auth"; const auth = getAuth(); auth.languageCode = 'it'; // To apply the default browser preference instead of explicitly setting it. // auth.useDeviceLanguage();
Web
firebase.auth().languageCode = 'it'; // To apply the default browser preference instead of explicitly setting it. // firebase.auth().useDeviceLanguage();
- Không bắt buộc: Chỉ định các thông số bổ sung của nhà cung cấp OAuth tuỳ chỉnh mà bạn muốn gửi cùng với yêu cầu OAuth. Để thêm một tham số tuỳ chỉnh, hãy gọi
setCustomParameters
trên trình cung cấp đã khởi tạo bằng một đối tượng chứa khoá theo quy định trong tài liệu của trình cung cấp OAuth và giá trị tương ứng. Ví dụ:Web
provider.setCustomParameters({ 'display': 'popup' });
Web
provider.setCustomParameters({ 'display': 'popup' });
- Xác thực bằng Firebase thông qua đối tượng nhà cung cấp Facebook. Bạn có thể nhắc người dùng đăng nhập bằng tài khoản Facebook của họ bằng cách mở một cửa sổ bật lên hoặc bằng cách chuyển hướng đến trang đăng nhập. Bạn nên sử dụng phương thức chuyển hướng trên thiết bị di động.
- Để đăng nhập bằng cửa sổ bật lên, hãy gọi
signInWithPopup
:Web
import { getAuth, signInWithPopup, FacebookAuthProvider } from "firebase/auth"; const auth = getAuth(); signInWithPopup(auth, provider) .then((result) => { // The signed-in user info. const user = result.user; // This gives you a Facebook Access Token. You can use it to access the Facebook API. const credential = FacebookAuthProvider.credentialFromResult(result); const accessToken = credential.accessToken; // IdP data available using getAdditionalUserInfo(result) // ... }) .catch((error) => { // Handle Errors here. const errorCode = error.code; const errorMessage = error.message; // The email of the user's account used. const email = error.customData.email; // The AuthCredential type that was used. const credential = FacebookAuthProvider.credentialFromError(error); // ... });
Web
firebase .auth() .signInWithPopup(provider) .then((result) => { /** @type {firebase.auth.OAuthCredential} */ var credential = result.credential; // The signed-in user info. var user = result.user; // IdP data available in result.additionalUserInfo.profile. // ... // This gives you a Facebook Access Token. You can use it to access the Facebook API. var accessToken = credential.accessToken; // ... }) .catch((error) => { // Handle Errors here. var errorCode = error.code; var errorMessage = error.message; // The email of the user's account used. var email = error.email; // The firebase.auth.AuthCredential type that was used. var credential = error.credential; // ... });
Đây cũng là nơi bạn có thể phát hiện và xử lý lỗi. Để xem danh sách mã lỗi, hãy xem Tài liệu tham khảo về hoạt động xác thực.
- Để đăng nhập bằng cách chuyển hướng đến trang đăng nhập, hãy gọi
signInWithRedirect
: Hãy làm theo các phương pháp hay nhất khi sử dụng `signInWithRedirect`.Web
import { getAuth, signInWithRedirect } from "firebase/auth"; const auth = getAuth(); signInWithRedirect(auth, provider);
Web
firebase.auth().signInWithRedirect(provider);
getRedirectResult
khi trang của bạn tải:Web
import { getAuth, getRedirectResult, FacebookAuthProvider } from "firebase/auth"; const auth = getAuth(); getRedirectResult(auth) .then((result) => { // This gives you a Facebook Access Token. You can use it to access the Facebook API. const credential = FacebookAuthProvider.credentialFromResult(result); const token = credential.accessToken; const user = result.user; // IdP data available using getAdditionalUserInfo(result) // ... }).catch((error) => { // Handle Errors here. const errorCode = error.code; const errorMessage = error.message; // The email of the user's account used. const email = error.customData.email; // AuthCredential type that was used. const credential = FacebookAuthProvider.credentialFromError(error); // ... });
Web
firebase.auth() .getRedirectResult() .then((result) => { if (result.credential) { /** @type {firebase.auth.OAuthCredential} */ var credential = result.credential; // This gives you a Facebook Access Token. You can use it to access the Facebook API. var token = credential.accessToken; // ... } // The signed-in user info. var user = result.user; // IdP data available in result.additionalUserInfo.profile. // ... }).catch((error) => { // Handle Errors here. var errorCode = error.code; var errorMessage = error.message; // The email of the user's account used. var email = error.email; // The firebase.auth.AuthCredential type that was used. var credential = error.credential; // ... });
- Để đăng nhập bằng cửa sổ bật lên, hãy gọi
Xác thực bằng Firebase trong tiện ích Chrome
Nếu bạn đang tạo một ứng dụng tiện ích Chrome, hãy xem hướng dẫn về Tài liệu ngoài màn hình.
Các bước tiếp theo
Sau khi người dùng đăng nhập lần đầu tiên, một tài khoản người dùng mới sẽ được tạo và liên kết với thông tin đăng nhập (tức là tên người dùng và mật khẩu, số điện thoại hoặc thông tin nhà cung cấp dịch vụ uỷ quyền) mà người dùng đã đăng nhập. Tài khoản mới này được lưu trữ trong dự án Firebase của bạn và có thể dùng để xác định một người dùng trên mọi ứng dụng trong dự án, bất kể người dùng đăng nhập bằng cách nào.
-
Trong các ứng dụng của bạn, cách hay nhất để biết trạng thái uỷ quyền của người dùng là đặt một đối tượng theo dõi trên đối tượng
Auth
. Sau đó, bạn có thể lấy thông tin hồ sơ cơ bản của người dùng từ đối tượngUser
. Xem phần Quản lý người dùng. Trong Firebase Realtime Database và Cloud Storage Quy tắc bảo mật, bạn có thể lấy mã nhận dạng người dùng riêng biệt của người dùng đã đăng nhập từ biến
auth
và dùng mã nhận dạng đó để kiểm soát dữ liệu mà người dùng có thể truy cập.
Bạn có thể cho phép người dùng đăng nhập vào ứng dụng của bạn bằng nhiều trình cung cấp dịch vụ xác thực bằng cách liên kết thông tin đăng nhập của trình cung cấp dịch vụ xác thực với một tài khoản người dùng hiện có.
Để đăng xuất người dùng, hãy gọi
signOut
:
Web
import { getAuth, signOut } from "firebase/auth"; const auth = getAuth(); signOut(auth).then(() => { // Sign-out successful. }).catch((error) => { // An error happened. });
Web
firebase.auth().signOut().then(() => { // Sign-out successful. }).catch((error) => { // An error happened. });