هویت فدرال & ورود به سیستم اجتماعی

احراز هویت اجتماعی یک جریان احراز هویت چند مرحله‌ای است که به شما این امکان را می‌دهد تا یک کاربر را وارد یک حساب کاربری کنید یا آنها را با یک حساب موجود پیوند دهید.

هم پلتفرم‌های بومی و هم وب از ایجاد یک اعتبارنامه پشتیبانی می‌کنند که سپس می‌تواند به روش‌های signInWithCredential یا linkWithCredential منتقل شود. یا در پلتفرم‌های وب، می‌توانید فرآیند احراز هویت را از طریق یک پنجره بازشو یا تغییر مسیر راه‌اندازی کنید.

گوگل

اکثر پیکربندی‌ها از قبل هنگام استفاده از Google Sign-In با Firebase تنظیم شده‌اند، اما باید مطمئن شوید که کلید SHA1 دستگاه شما برای استفاده در Android پیکربندی شده است. می توانید نحوه تولید کلید را در اسناد احراز هویت ببینید.

مطمئن شوید که ارائه‌دهنده ورود به سیستم «Google» در کنسول Firebase فعال است.

اگر کاربر شما به سیستم Google وارد شود، پس از ثبت دستی یک حساب، به دلیل مفهوم Firebase Authentications ارائه دهندگان مورد اعتماد، ارائه دهنده احراز هویت آنها به طور خودکار به Google تغییر می کند. در اینجا می توانید در مورد این موضوع بیشتر بدانید.

iOS+ و اندروید

در پلتفرم‌های بومی، یک کتابخانه شخص ثالث برای راه‌اندازی جریان احراز هویت مورد نیاز است.

افزونه رسمی google_sign_in را نصب کنید.

پس از نصب، جریان ورود به سیستم را فعال کنید و یک اعتبار جدید ایجاد کنید:

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

وب

در وب، Firebase SDK از مدیریت خودکار جریان احراز هویت با استفاده از پروژه Firebase شما پشتیبانی می‌کند. به عنوان مثال:

با ارائه هر گونه مجوز اضافی که می خواهید از کاربر دریافت کنید، یک ارائه دهنده تأیید اعتبار Google ایجاد کنید:

GoogleAuthProvider googleProvider = GoogleAuthProvider();

googleProvider.addScope('https://www.googleapis.com/auth/contacts.readonly');
googleProvider.setCustomParameters({
  'login_hint': 'user@example.com'
});

اعتبار متد signInWithPopup را ارائه دهید. با این کار پنجره جدیدی ظاهر می شود که از کاربر می خواهد به پروژه شما وارد شود. همچنین می‌توانید از signInWithRedirect برای حفظ فرآیند احراز هویت در همان پنجره استفاده کنید.

Future<UserCredential> signInWithGoogle() async {
  // Create a new provider
  GoogleAuthProvider googleProvider = GoogleAuthProvider();

  googleProvider.addScope('https://www.googleapis.com/auth/contacts.readonly');
  googleProvider.setCustomParameters({
    'login_hint': 'user@example.com'
  });

  // Once signed in, return the UserCredential
  return await FirebaseAuth.instance.signInWithPopup(googleProvider);

  // Or use signInWithRedirect
  // return await FirebaseAuth.instance.signInWithRedirect(googleProvider);
}

بازی‌های Google Play (فقط اندروید)

مطمئن شوید که ارائه‌دهنده ورود به سیستم «بازی‌های Play» در کنسول Firebase فعال است. این دستورالعمل‌ها را برای راه‌اندازی پروژه Firebase Games Play دنبال کنید.

این دستورالعمل‌ها را برای پیکربندی خدمات بازی‌های Play با برنامه Firebase خود دنبال کنید.

اندروید

Future<void> _signInWithPlayGames() async {
  // Get server auth code from 3rd party provider
  // See PR description for details on how you might get the server auth code:
  // https://github.com/firebase/flutterfire/pull/12201#issue-2100392487
  final serverAuthCode = '...';
  final playGamesCredential = PlayGamesAuthProvider.credential(
                                          serverAuthCode: serverAuthCode);

  await FirebaseAuth.instance
    .signInWithCredential(playGamesCredential);
}

فیس بوک

قبل از شروع، برنامه توسعه دهنده فیس بوک خود را راه اندازی کنید و مراحل راه اندازی را دنبال کنید تا Login فیس بوک را فعال کنید.

مطمئن شوید که ارائه‌دهنده ورود به سیستم «فیس‌بوک» در کنسول Firebase فعال است. با شناسه برنامه فیس بوک و مجموعه Secret.

iOS+ و اندروید

در پلتفرم‌های بومی، یک کتابخانه شخص ثالث برای نصب SDK فیسبوک و راه‌اندازی جریان احراز هویت مورد نیاز است.

افزونه flutter_facebook_auth نصب کنید.

برای اطمینان از اینکه هر دو SDK فیس بوک اندروید و iOS به درستی مقداردهی اولیه شده اند، باید مراحل موجود در اسناد افزونه را دنبال کنید. پس از تکمیل، جریان ورود به سیستم را فعال کنید، یک اعتبار فیس بوک ایجاد کنید و کاربر را وارد کنید:

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

وب

در وب، Firebase SDK از مدیریت خودکار جریان احراز هویت با استفاده از جزئیات برنامه فیس بوک ارائه شده در کنسول Firebase پشتیبانی می کند. به عنوان مثال:

یک ارائه‌دهنده فیس‌بوک ایجاد کنید، با ارائه هر گونه مجوز اضافی که می‌خواهید از کاربر دریافت کنید.

اطمینان حاصل کنید که URI تغییر مسیر OAuth از کنسول Firebase به عنوان یک URI معتبر OAuth Redirect در برنامه فیس بوک شما اضافه شده است.

FacebookAuthProvider facebookProvider = FacebookAuthProvider();

facebookProvider.addScope('email');
facebookProvider.setCustomParameters({
  'display': 'popup',
});

اعتبار متد signInWithPopup را ارائه دهید. با این کار یک پنجره جدید ظاهر می شود که از کاربر می خواهد به برنامه فیس بوک شما وارد شود:

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

اپل

iOS+

قبل از شروع، Sign In with Apple را پیکربندی کنید و Apple را به عنوان ارائه‌دهنده ورود فعال کنید .

در مرحله بعد، مطمئن شوید که برنامه های Runner شما دارای قابلیت "ورود به سیستم با اپل" هستند.

اندروید

قبل از شروع، Sign In with Apple را پیکربندی کنید و Apple را به عنوان ارائه‌دهنده ورود فعال کنید .

وب

قبل از شروع، Sign In with Apple را پیکربندی کنید و Apple را به عنوان ارائه‌دهنده ورود فعال کنید .

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

فقط ورود به سیستم پلتفرم اپل

ورود اپل در پلتفرم های iOS+ را نیز می توان با روش زیر انجام داد:

// Implement a function that generates a nonce. See iOS documentation for how to create a nonce:
// https://firebase.google.com/docs/auth/ios/apple#sign_in_with_apple_and_authenticate_with_firebase
String rawNonce = createNonce();
// Create a SHA-256 hash of the nonce. Consider using the `crypto` package from the pub.dev registry.
String hashSHA256String = createHashSHA256String(rawNonce);
// Use the hash of the nonce to get the idToken. Consider using the `sign_in_with_apple` plugin from the pub.dev registry.
String idToken = await getIdToken();

final fullName = AppleFullPersonName(
  familyName: 'Name',
  givenName: 'Your',
);
// Use the `rawNonce` and `idToken` to get the credential
final credential = AppleAuthProvider.credentialWithIDToken(
  idToken,
  rawNonce,
  fullName,
);

await FirebaseAuth.instance.signInWithCredential(credential);

توکن های تأیید اعتبار اپل را لغو کنید

ورود به سیستم اپل در پلتفرم‌های اپل یک کد مجوز را برمی‌گرداند که می‌توان از آن برای لغو کد تأیید اعتبار اپل با استفاده از revokeTokenWithAuthorizationCode() API استفاده کرد.

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

مرکز بازی اپل (فقط اپل)

مطمئن شوید که ارائه‌دهنده ورود به سیستم «مرکز بازی» در کنسول Firebase فعال است. این دستورالعمل‌ها را برای راه‌اندازی پروژه Game Center Firebase دنبال کنید.

قبل از اینکه اعتبار Firebase Game Center صادر شود و از طریق Firebase وارد سیستم شوید، باید با Game Center وارد شوید. در اینجا دستورالعمل هایی وجود دارد که چگونه می توان به آن دست یافت.

iOS+

Future<void> _signInWithGameCenter() async {
  final credential = GameCenterAuthProvider.credential();
  await FirebaseAuth.instance
      .signInWithCredential(credential);
}

مایکروسافت

iOS+

قبل از اینکه شروع به پیکربندی Microsoft Login برای iOS کنید و طرح‌های URL سفارشی را به Runner خود اضافه کنید (مرحله 1) .

اندروید

قبل از شروع پیکربندی Microsoft Login برای Android .

فراموش نکنید که اثر انگشت SHA-1 برنامه خود را اضافه کنید.

وب

قبل از شروع پیکربندی Microsoft Login for 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);
  }
}

توییتر

مطمئن شوید که ارائه‌دهنده ورود به سیستم توییتر در کنسول Firebase با کلید API و مجموعه مخفی API فعال است. اطمینان حاصل کنید که URI تغییر مسیر Firebase OAuth شما (به عنوان مثال my-app-12345.firebaseapp.com/__/auth/handler) به عنوان URL بازگشت به تماس مجوز شما در صفحه تنظیمات برنامه در تنظیمات برنامه توییتر شما تنظیم شده است.

همچنین ممکن است نیاز باشد بسته به برنامه خود دسترسی API بالاتری درخواست کنید.

iOS+

شما باید طرح URL سفارشی خود را همانطور که در مرحله 1 راهنمای iOS توضیح داده شده است، پیکربندی کنید.

اندروید

اگر هنوز اثر انگشت SHA-1 برنامه خود را مشخص نکرده‌اید، این کار را از صفحه تنظیمات کنسول Firebase انجام دهید. برای جزئیات در مورد نحوه دریافت اثر انگشت SHA-1 برنامه خود، به تأیید اعتبار مشتری خود مراجعه کنید.

وب

خارج از جعبه کار می کند.

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

مطمئن شوید که یک برنامه OAuth را از تنظیمات برنامه‌نویس GitHub خود راه‌اندازی کرده‌اید و ارائه‌دهنده ورود به سیستم "GitHub" در کنسول Firebase با شناسه مشتری و Secret تنظیم شده است، با URL برگشت به تماس در برنامه GitHub تنظیم شده است.

iOS+ و اندروید

برای پلتفرم‌های بومی، باید google-services.json و GoogleService-Info.plist را اضافه کنید.

برای iOS، طرح URL سفارشی را همانطور که در مرحله 1 راهنمای iOS توضیح داده شده است، اضافه کنید.

Future<UserCredential> signInWithGitHub() async {
  // Create a new provider
  GithubAuthProvider githubProvider = GithubAuthProvider();

  return await FirebaseAuth.instance.signInWithProvider(githubProvider);
}

وب

در وب، GitHub SDK از مدیریت خودکار جریان احراز هویت با استفاده از جزئیات برنامه GitHub ارائه شده در کنسول Firebase پشتیبانی می کند. اطمینان حاصل کنید که URL برگشت به تماس در کنسول Firebase به عنوان URL بازگشت به تماس در برنامه GitHub شما در کنسول توسعه دهنده اضافه شده است.

به عنوان مثال:

یک ارائه دهنده GitHub ایجاد کنید و اعتبار را به متد signInWithPopup ارائه دهید. با این کار یک پنجره جدید ظاهر می شود که از کاربر می خواهد به برنامه GitHub شما وارد شود:

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" در کنسول Firebase با کلید API و مجموعه مخفی API فعال است. همچنین مطمئن شوید که URI تغییر مسیر Firebase OAuth شما (به عنوان مثال my-app-12345.firebaseapp.com/__/auth/handler) به عنوان URI تغییر مسیر در پیکربندی شبکه برنامه‌نویس یاهو برنامه شما تنظیم شده است.

iOS+

قبل از شروع، Yahoo Login را برای iOS پیکربندی کنید و طرح‌های URL سفارشی را به Runner خود اضافه کنید (مرحله 1) .

اندروید

قبل از شروع، Yahoo Login را برای Android پیکربندی کنید .

فراموش نکنید که اثر انگشت SHA-1 برنامه خود را اضافه کنید.

وب

خارج از جعبه کار می کند.

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

با استفاده از نشانه دسترسی OAuth

با استفاده از یک AuthProvider، می توانید رمز دسترسی مرتبط با ارائه دهنده را با درخواست زیر بازیابی کنید.

final appleProvider = AppleAuthProvider();

final user = await FirebaseAuth.instance.signInWithProvider(appleProvider);
final accessToken = user.credential?.accessToken;

// You can send requests with the `accessToken`

پیوند دادن یک ارائه دهنده احراز هویت

اگر می‌خواهید یک ارائه‌دهنده را به یک کاربر فعلی پیوند دهید، می‌توانید از روش زیر استفاده کنید: ``dart await FirebaseAuth.instance.signInAnonymously();

final appleProvider = AppleAuthProvider();

if (kIsWeb) { await FirebaseAuth.instance.currentUser?.linkWithPopup(appleProvider);

// همچنین می توانید از linkWithRedirect } else { await FirebaseAuth.instance.currentUser?.linkWithProvider(appleProvider); }

// شما کاربر ناشناس هستید اکنون ارتقا یافته است تا بتوانید با "ورود به سیستم با اپل" ارتباط برقرار کنید.

با ارائه دهنده احراز هویت مجدد

همین الگو را می توان با reauthenticateWithProvider استفاده کرد که می تواند برای بازیابی اعتبارنامه های جدید برای عملیات حساسی که نیاز به ورود اخیر دارند استفاده شود.

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