Xác thực xã hội là quy trình xác thực gồm nhiều bước, cho phép bạn đăng nhập người dùng vào tài khoản hoặc liên kết họ với tài khoản hiện có.
Cả nền tảng gốc và web đều hỗ trợ tạo thông tin xác thực mà sau đó có thể được chuyển đến các phương thức signInWithCredential
hoặc linkWithCredential
. Ngoài ra, trên nền tảng web, bạn có thể kích hoạt quá trình xác thực thông qua cửa sổ bật lên hoặc chuyển hướng.
Hầu hết cấu hình đã được thiết lập khi sử dụng Đăng nhập bằng Google với Firebase, tuy nhiên, bạn cần đảm bảo khóa SHA1 của máy đã được định cấu hình để sử dụng với Android. Bạn có thể xem cách tạo khóa trong tài liệu xác thực .
Đảm bảo nhà cung cấp đăng nhập "Google" được bật trên Bảng điều khiển Firebase .
Nếu người dùng của bạn đăng nhập bằng Google, sau khi đăng ký tài khoản theo cách thủ công, nhà cung cấp xác thực của họ sẽ tự động thay đổi thành Google, do khái niệm Xác thực Firebase về nhà cung cấp đáng tin cậy. Bạn có thể tìm hiểu thêm về điều này ở đây .
iOS+ và Android
Trên nền tảng gốc, cần có thư viện của bên thứ 3 để kích hoạt luồng xác thực.
Cài đặt plugin google_sign_in
chính thức.
Sau khi cài đặt, hãy kích hoạt luồng đăng nhập và tạo thông tin xác thực mới:
import 'package:google_sign_in/google_sign_in.dart';
Future<UserCredential> signInWithGoogle() async {
// Trigger the authentication flow
final GoogleSignInAccount? googleUser = await GoogleSignIn().signIn();
// Obtain the auth details from the request
final GoogleSignInAuthentication? googleAuth = await googleUser?.authentication;
// Create a new credential
final credential = GoogleAuthProvider.credential(
accessToken: googleAuth?.accessToken,
idToken: googleAuth?.idToken,
);
// Once signed in, return the UserCredential
return await FirebaseAuth.instance.signInWithCredential(credential);
}
Web
Trên web, SDK Firebase cung cấp hỗ trợ để tự động xử lý luồng xác thực bằng dự án Firebase của bạn. Ví dụ:
Tạo nhà cung cấp xác thực Google, cung cấp mọi phạm vi quyền bổ sung mà bạn muốn nhận được từ người dùng:
GoogleAuthProvider googleProvider = GoogleAuthProvider();
googleProvider.addScope('https://www.googleapis.com/auth/contacts.readonly');
googleProvider.setCustomParameters({
'login_hint': '[email protected]'
});
Cung cấp thông tin xác thực cho phương thức signInWithPopup
. Điều này sẽ kích hoạt một cửa sổ mới xuất hiện nhắc người dùng đăng nhập vào dự án của bạn. Ngoài ra, bạn có thể sử dụng signInWithRedirect
để giữ quá trình xác thực trong cùng một cửa sổ.
Future<UserCredential> signInWithGoogle() async {
// Create a new provider
GoogleAuthProvider googleProvider = GoogleAuthProvider();
googleProvider.addScope('https://www.googleapis.com/auth/contacts.readonly');
googleProvider.setCustomParameters({
'login_hint': '[email protected]'
});
// Once signed in, return the UserCredential
return await FirebaseAuth.instance.signInWithPopup(googleProvider);
// Or use signInWithRedirect
// return await FirebaseAuth.instance.signInWithRedirect(googleProvider);
}
Trò chơi trên Google Play
Bạn có thể xác thực người dùng trong trò chơi Android của mình bằng cách đăng nhập vào Play Trò chơi.
Android
Làm theo hướng dẫn thiết lập Google trên Android, sau đó định cấu hình dịch vụ Play Trò chơi bằng thông tin ứng dụng Firebase của bạn .
Thao tác sau sẽ kích hoạt luồng đăng nhập, tạo thông tin xác thực mới và đăng nhập người dùng:
final googleUser = await GoogleSignIn(
signInOption: SignInOption.games,
).signIn();
final googleAuth = await googleUser?.authentication;
if (googleAuth != null) {
// Create a new credential
final credential = GoogleAuthProvider.credential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
// Once signed in, return the UserCredential
await _auth.signInWithCredential(credential);
}
Trước khi bắt đầu, hãy thiết lập Ứng dụng dành cho nhà phát triển Facebook của bạn và làm theo quy trình thiết lập để bật Đăng nhập Facebook.
Đảm bảo nhà cung cấp đăng nhập "Facebook" được bật trên Bảng điều khiển Firebase . với ID ứng dụng Facebook và bộ Bí mật.
iOS+ và Android
Trên nền tảng gốc, cần có thư viện của bên thứ 3 để cài đặt Facebook SDK và kích hoạt luồng xác thực.
Cài đặt plugin flutter_facebook_auth
.
Bạn sẽ cần làm theo các bước trong tài liệu về plugin để đảm bảo rằng cả SDK Facebook dành cho Android và iOS đều được khởi tạo chính xác. Sau khi hoàn tất, hãy kích hoạt luồng đăng nhập, tạo thông tin xác thực Facebook và đăng nhập người dùng:
import 'package:flutter_facebook_auth/flutter_facebook_auth.dart';
Future<UserCredential> signInWithFacebook() async {
// Trigger the sign-in flow
final LoginResult loginResult = await FacebookAuth.instance.login();
// Create a credential from the access token
final OAuthCredential facebookAuthCredential = FacebookAuthProvider.credential(loginResult.accessToken.token);
// Once signed in, return the UserCredential
return FirebaseAuth.instance.signInWithCredential(facebookAuthCredential);
}
Web
Trên web, SDK Firebase cung cấp hỗ trợ để tự động xử lý luồng xác thực bằng cách sử dụng chi tiết ứng dụng Facebook được cung cấp trên bảng điều khiển Firebase. Ví dụ:
Tạo nhà cung cấp Facebook, cung cấp mọi phạm vi quyền bổ sung mà bạn muốn nhận được từ người dùng.
Đảm bảo rằng URI chuyển hướng OAuth từ bảng điều khiển Firebase được thêm dưới dạng URI chuyển hướng OAuth hợp lệ trong Ứng dụng Facebook của bạn.
FacebookAuthProvider facebookProvider = FacebookAuthProvider();
facebookProvider.addScope('email');
facebookProvider.setCustomParameters({
'display': 'popup',
});
Cung cấp thông tin xác thực cho phương thức signInWithPopup
. Thao tác này sẽ kích hoạt một cửa sổ mới xuất hiện nhắc người dùng đăng nhập vào ứng dụng Facebook của bạn:
Future<UserCredential> signInWithFacebook() async {
// Create a new provider
FacebookAuthProvider facebookProvider = FacebookAuthProvider();
facebookProvider.addScope('email');
facebookProvider.setCustomParameters({
'display': 'popup',
});
// Once signed in, return the UserCredential
return await FirebaseAuth.instance.signInWithPopup(facebookProvider);
// Or use signInWithRedirect
// return await FirebaseAuth.instance.signInWithRedirect(facebookProvider);
}
Quả táo
iOS+
Trước khi bạn bắt đầu, hãy định cấu hình Đăng nhập bằng Apple và bật Apple làm nhà cung cấp dịch vụ đăng nhập .
Tiếp theo, hãy đảm bảo rằng ứng dụng Runner
của bạn có khả năng "Đăng nhập bằng Apple".
Android
Trước khi bạn bắt đầu, hãy định cấu hình Đăng nhập bằng Apple và bật Apple làm nhà cung cấp dịch vụ đăng nhập .
Web
Trước khi bạn bắt đầu, hãy định cấu hình Đăng nhập bằng Apple và bật Apple làm nhà cung cấp dịch vụ đăng nhập .
import 'package:firebase_auth/firebase_auth.dart';
Future<UserCredential> signInWithApple() async {
final appleProvider = AppleAuthProvider();
if (kIsWeb) {
await FirebaseAuth.instance.signInWithPopup(appleProvider);
} else {
await FirebaseAuth.instance.signInWithProvider(appleProvider);
}
}
Thu hồi mã thông báo xác thực của Apple
Đăng nhập Apple trên nền tảng Apple trả về mã ủy quyền có thể được sử dụng để thu hồi mã thông báo xác thực Apple bằng cách sử dụng API revokeTokenWithAuthorizationCode()
.
import 'package:firebase_auth/firebase_auth.dart';
Future<UserCredential> signInWithApple() async {
final appleProvider = AppleAuthProvider();
UserCredential userCredential = await FirebaseAuth.instance.signInWithPopup(appleProvider);
// Keep the authorization code returned from Apple platforms
String? authCode = userCredential.additionalUserInfo?.authorizationCode;
// Revoke Apple auth token
await FirebaseAuth.instance.revokeTokenWithAuthorizationCode(authCode!);
}
Microsoft
iOS+
Trước khi bạn bắt đầu định cấu hình Đăng nhập Microsoft cho iOS và thêm lược đồ URL tùy chỉnh vào Runner (bước 1) của bạn .
Android
Trước khi bạn bắt đầu định cấu hình Đăng nhập Microsoft cho Android .
Đừng quên thêm dấu vân tay SHA-1 của ứng dụng của bạn.
Web
Trước khi bạn bắt đầu định cấu hình Đăng nhập Microsoft cho Web .
import 'package:firebase_auth/firebase_auth.dart';
Future<UserCredential> signInWithMicrosoft() async {
final microsoftProvider = MicrosoftAuthProvider();
if (kIsWeb) {
await FirebaseAuth.instance.signInWithPopup(microsoftProvider);
} else {
await FirebaseAuth.instance.signInWithProvider(microsoftProvider);
}
}
Đảm bảo nhà cung cấp đăng nhập "Twitter" được bật trên Bảng điều khiển Firebase với bộ Khóa API và Bí mật API. Đảm bảo URI chuyển hướng Firebase OAuth của bạn (ví dụ: my-app-12345.firebaseapp.com/__/auth/handler) được đặt làm URL gọi lại Ủy quyền trong trang cài đặt ứng dụng của bạn trên cấu hình ứng dụng Twitter của bạn.
Bạn cũng có thể cần yêu cầu quyền truy cập API nâng cao tùy thuộc vào ứng dụng của bạn .
iOS+
Bạn cần định cấu hình lược đồ URL tùy chỉnh của mình như được mô tả trong hướng dẫn iOS bước 1 .
Android
Nếu bạn chưa chỉ định dấu vân tay SHA-1 cho ứng dụng của mình, hãy làm như vậy từ trang Cài đặt của bảng điều khiển Firebase. Tham khảo Xác thực ứng dụng khách của bạn để biết chi tiết về cách lấy dấu vân tay SHA-1 của ứng dụng.
Web
Sáng tạo.
import 'package:firebase_auth/firebase_auth.dart';
Future<void> _signInWithTwitter() async {
TwitterAuthProvider twitterProvider = TwitterAuthProvider();
if (kIsWeb) {
await FirebaseAuth.instance.signInWithPopup(twitterProvider);
} else {
await FirebaseAuth.instance.signInWithProvider(twitterProvider);
}
}
GitHub
Đảm bảo rằng bạn đã thiết lập Ứng dụng OAuth từ Cài đặt dành cho nhà phát triển GitHub của mình và nhà cung cấp đăng nhập "GitHub" được bật trên Bảng điều khiển Firebase với ID khách hàng và Bí mật được đặt, với URL gọi lại được đặt trong ứng dụng GitHub.
iOS+ và Android
Đối với nền tảng gốc, bạn cần thêm google-services.json
và GoogleService-Info.plist
.
Đối với iOS, hãy thêm lược đồ URL tùy chỉnh như được mô tả trong hướng dẫn iOS bước 1.
Future<UserCredential> signInWithGitHub() async {
// Create a new provider
GithubAuthProvider githubProvider = GithubAuthProvider();
return await FirebaseAuth.instance.signInWithProvider(githubProvider);
}
Web
Trên web, SDK GitHub cung cấp hỗ trợ để tự động xử lý luồng xác thực bằng cách sử dụng chi tiết ứng dụng GitHub được cung cấp trên bảng điều khiển Firebase. Đảm bảo rằng URL gọi lại trong bảng điều khiển Firebase được thêm dưới dạng URL gọi lại trong ứng dụng GitHub của bạn trên bảng điều khiển dành cho nhà phát triển.
Ví dụ:
Tạo nhà cung cấp GitHub và cung cấp thông tin xác thực cho phương thức signInWithPopup
. Thao tác này sẽ kích hoạt một cửa sổ mới xuất hiện nhắc người dùng đăng nhập vào ứng dụng GitHub của bạn:
Future<UserCredential> signInWithGitHub() async {
// Create a new provider
GithubAuthProvider githubProvider = GithubAuthProvider();
// Once signed in, return the UserCredential
return await FirebaseAuth.instance.signInWithPopup(githubProvider);
// Or use signInWithRedirect
// return await FirebaseAuth.instance.signInWithRedirect(githubProvider);
}
Yahoo
Đảm bảo nhà cung cấp dịch vụ đăng nhập "Yahoo" được bật trên Bảng điều khiển Firebase với bộ Khóa API và Bí mật API. Ngoài ra, hãy đảm bảo URI chuyển hướng Firebase OAuth của bạn (ví dụ: my-app-12345.firebaseapp.com/__/auth/handler) được đặt làm URI chuyển hướng trong cấu hình Mạng nhà phát triển Yahoo của ứng dụng của bạn.
iOS+
Trước khi bạn bắt đầu, hãy định cấu hình Đăng nhập Yahoo dành cho iOS và thêm lược đồ URL tùy chỉnh vào Runner (bước 1) của bạn .
Android
Trước khi bạn bắt đầu, hãy định cấu hình Đăng nhập Yahoo cho Android .
Đừng quên thêm dấu vân tay SHA-1 của ứng dụng của bạn.
Web
Sáng tạo.
import 'package:firebase_auth/firebase_auth.dart';
Future<UserCredential> signInWithYahoo() async {
final yahooProvider = YahooAuthProvider();
if (kIsWeb) {
await _auth.signInWithPopup(yahooProvider);
} else {
await _auth.signInWithProvider(yahooProvider);
}
}
Sử dụng mã thông báo truy cập OAuth
Bằng cách sử dụng AuthProvider, bạn có thể truy xuất mã thông báo truy cập được liên kết với nhà cung cấp bằng cách thực hiện yêu cầu sau.
final appleProvider = AppleAuthProvider();
final user = await FirebaseAuth.instance.signInWithProvider(appleProvider);
final accessToken = user.credential?.accessToken;
// You can send requests with the `accessToken`
Liên kết nhà cung cấp xác thực
Nếu bạn muốn liên kết một nhà cung cấp với một người dùng hiện tại, bạn có thể sử dụng phương pháp sau: ```dart chờ FirebaseAuth.instance.signInAnonymous();
appleProvider cuối cùng = AppleAuthProvider();
if (kIsWeb) { đang chờ FirebaseAuth.instance.currentUser?.linkWithPopup(appleProvider);
// Bạn cũng có thể sử dụng linkWithRedirect
} else { chờ FirebaseAuth.instance.currentUser?.linkWithProvider(appleProvider); }
// Người dùng ẩn danh của bạn hiện đã được nâng cấp để có thể kết nối với Sign In With Apple ```
Xác thực lại với nhà cung cấp
Mẫu tương tự có thể được sử dụng với reauthenticateWithProvider
để truy xuất thông tin xác thực mới cho các hoạt động nhạy cảm yêu cầu đăng nhập gần đây.
final appleProvider = AppleAuthProvider();
if (kIsWeb) {
await FirebaseAuth.instance.currentUser?.reauthenticateWithPopup(appleProvider);
// Or you can reauthenticate with a redirection
// await FirebaseAuth.instance.currentUser?.reauthenticateWithRedirect(appleProvider);
} else {
await FirebaseAuth.instance.currentUser?.reauthenticateWithProvider(appleProvider);
}
// You can now perform sensitive operations