ফেডারেটেড পরিচয় এবং সামাজিক সাইন-ইন

সোশ্যাল অথেন্টিকেশন হলো একটি বহু-ধাপের প্রমাণীকরণ প্রক্রিয়া, যার মাধ্যমে আপনি কোনো ব্যবহারকারীকে একটি অ্যাকাউন্টে সাইন ইন করাতে বা তাকে বিদ্যমান কোনো অ্যাকাউন্টের সাথে লিঙ্ক করতে পারেন।

নেটিভ প্ল্যাটফর্ম এবং ওয়েব উভয়ই ক্রেডেনশিয়াল তৈরি করা সমর্থন করে, যা পরবর্তীতে signInWithCredential বা linkWithCredential মেথডগুলোতে পাস করা যায়। বিকল্পভাবে, ওয়েব প্ল্যাটফর্মে আপনি একটি পপআপ বা রিডাইরেক্টের মাধ্যমে অথেনটিকেশন প্রক্রিয়াটি চালু করতে পারেন।

গুগল

Firebase-এর সাথে Google Sign-In ব্যবহার করার সময় বেশিরভাগ কনফিগারেশন আগে থেকেই সেটআপ করা থাকে, তবে আপনাকে নিশ্চিত করতে হবে যে আপনার মেশিনের SHA1 কী-টি Android-এর সাথে ব্যবহারের জন্য কনফিগার করা হয়েছে। অথেনটিকেশন ডকুমেন্টেশনে আপনি দেখতে পারেন কীভাবে এই কী-টি জেনারেট করতে হয়।

ফায়ারবেস কনসোলে 'Google' সাইন-ইন প্রোভাইডারটি সক্রিয় করা আছে কিনা তা নিশ্চিত করুন।

আপনার ব্যবহারকারী যদি আগে থেকেই ম্যানুয়ালি একটি অ্যাকাউন্ট রেজিস্টার করার পর গুগল দিয়ে সাইন ইন করেন, তাহলে Firebase Authentications-এর ট্রাস্টেড প্রোভাইডার ধারণার কারণে তাদের অথেনটিকেশন প্রোভাইডার স্বয়ংক্রিয়ভাবে গুগলে পরিবর্তিত হয়ে যাবে। আপনি এই বিষয়ে আরও জানতে এখানে দেখতে পারেন।

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.instance.authenticate();

  // Obtain the auth details from the request
  final GoogleSignInAuthentication googleAuth = googleUser.authentication;

  // Create a new credential
  final credential = GoogleAuthProvider.credential(idToken: googleAuth.idToken);

  // Once signed in, return the UserCredential
  return await FirebaseAuth.instance.signInWithCredential(credential);
}

ওয়েব

ওয়েবে, ফায়ারবেস এসডিকে আপনার ফায়ারবেস প্রজেক্ট ব্যবহার করে অথেনটিকেশন ফ্লো স্বয়ংক্রিয়ভাবে পরিচালনা করার সুবিধা প্রদান করে। উদাহরণস্বরূপ:

একটি গুগল অথেন্টিকেশন প্রোভাইডার তৈরি করুন এবং ব্যবহারকারীর কাছ থেকে আপনি যে অতিরিক্ত অনুমতির পরিধি পেতে চান তা প্রদান করুন:

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

গুগল প্লে গেমস (শুধুমাত্র অ্যান্ড্রয়েডের জন্য)

ফায়ারবেস কনসোলে "প্লে গেমস" সাইন-ইন প্রোভাইডারটি সক্রিয় আছে কিনা তা নিশ্চিত করুন। প্লে গেমস ফায়ারবেস প্রজেক্ট সেট-আপ করার জন্য এই নির্দেশাবলী অনুসরণ করুন।

আপনার Firebase অ্যাপের সাথে Play Games পরিষেবাগুলি কনফিগার করার জন্য এই নির্দেশাবলী অনুসরণ করুন।

অ্যান্ড্রয়েড

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

ফেসবুক

শুরু করার আগে আপনার ফেসবুক ডেভেলপার অ্যাপ সেটআপ করুন এবং ফেসবুক লগইন চালু করার জন্য সেটআপ প্রক্রিয়াটি অনুসরণ করুন।

ফায়ারবেস কনসোলে "ফেসবুক" সাইন-ইন প্রদানকারীটি সক্রিয় করা আছে কিনা এবং ফেসবুক অ্যাপ আইডি ও সিক্রেট সেট করা আছে কিনা, তা নিশ্চিত করুন।

iOS+ এবং অ্যান্ড্রয়েড

নেটিভ প্ল্যাটফর্মগুলিতে, ফেসবুক এসডিকে ইনস্টল করতে এবং অথেনটিকেশন প্রক্রিয়াটি চালু করতে একটি থার্ড-পার্টি লাইব্রেরি প্রয়োজন হয়।

flutter_facebook_auth প্লাগইনটি ইনস্টল করুন।

অ্যান্ড্রয়েড ও আইওএস উভয় ফেসবুক এসডিকে সঠিকভাবে ইনিশিয়ালাইজ করা হয়েছে কিনা, তা নিশ্চিত করতে আপনাকে প্লাগইন ডকুমেন্টেশনে দেওয়া ধাপগুলো অনুসরণ করতে হবে। এটি সম্পন্ন হলে, সাইন-ইন ফ্লোটি ট্রিগার করুন, একটি ফেসবুক ক্রেডেনশিয়াল তৈরি করুন এবং ব্যবহারকারীকে সাইন ইন করান:

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 কনসোল থেকে প্রাপ্ত OAuth রিডাইরেক্ট URI-টি আপনার Facebook অ্যাপে একটি বৈধ OAuth রিডাইরেক্ট URI হিসেবে যুক্ত করা হয়েছে।

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

আপেল

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

অ্যাপল গেম সেন্টার (শুধুমাত্র অ্যাপলের জন্য)

ফায়ারবেস কনসোলে "গেম সেন্টার" সাইন-ইন প্রোভাইডারটি সক্রিয় আছে কিনা তা নিশ্চিত করুন। গেম সেন্টার ফায়ারবেস প্রজেক্ট সেট-আপ করার জন্য এই নির্দেশাবলী অনুসরণ করুন।

ফায়ারবেস গেম সেন্টার ক্রেডেনশিয়াল ইস্যু করার এবং ফায়ারবেসের মাধ্যমে লগ ইন করার আগে আপনাকে গেম সেন্টারে লগ ইন করতে হবে। কীভাবে এটি করা যেতে পারে, তার কিছু নির্দেশাবলী নিচে দেওয়া হলো

iOS+

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

মাইক্রোসফট

iOS+

শুরু করার আগে, iOS-এর জন্য Microsoft Login কনফিগার করুন এবং আপনার Runner-এ কাস্টম URL স্কিমগুলি যোগ করুন (ধাপ ১)

অ্যান্ড্রয়েড

শুরু করার আগে অ্যান্ড্রয়েডের জন্য মাইক্রোসফট লগইন কনফিগার করুন

আপনার অ্যাপের 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 Console- এ "Twitter" সাইন-ইন প্রোভাইডারটি একটি API Key এবং API Secret সেট করে সক্রিয় করা আছে। নিশ্চিত করুন যে আপনার Twitter অ্যাপের কনফিগ-এর সেটিংস পৃষ্ঠায়, আপনার Firebase OAuth রিডাইরেক্ট URI (যেমন my-app-12345.firebaseapp.com/__/auth/handler) আপনার Authorization কলব্যাক URL হিসেবে সেট করা আছে।

আপনার অ্যাপের উপর নির্ভর করে, আপনাকে উন্নত এপিআই অ্যাক্সেসের জন্য অনুরোধ করারও প্রয়োজন হতে পারে।

iOS+

iOS গাইডের ধাপ ১-এ বর্ণিত পদ্ধতি অনুযায়ী আপনাকে আপনার কাস্টম ইউআরএল স্কিম কনফিগার করতে হবে।

অ্যান্ড্রয়েড

If you haven't yet specified your app's SHA-1 fingerprint, do so from the Settings page of the Firebase console. Refer to Authenticating Your Client for details on how to get your app's SHA-1 fingerprint.

ওয়েব

কোনো রকম ঝামেলা ছাড়াই কাজ করে।

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 অ্যাপ সেটআপ করেছেন এবং Firebase কনসোলে "GitHub" সাইন-ইন প্রদানকারীটি সক্রিয় করা আছে, সাথে ক্লায়েন্ট আইডি ও সিক্রেট সেট করা আছে এবং GitHub অ্যাপে কলব্যাক ইউআরএল সেট করা আছে।

iOS+ এবং অ্যান্ড্রয়েড

নেটিভ প্ল্যাটফর্মের জন্য, আপনাকে google-services.json এবং GoogleService-Info.plist যোগ করতে হবে।

iOS-এর জন্য, iOS গাইডের ধাপ ১-এ বর্ণিত পদ্ধতি অনুযায়ী কাস্টম URL স্কিমটি যোগ করুন।

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

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

ওয়েব

ওয়েবে, গিটহাব এসডিকে ফায়ারবেস কনসোলে দেওয়া গিটহাব অ্যাপ্লিকেশনের বিবরণ ব্যবহার করে প্রমাণীকরণ প্রক্রিয়াটি স্বয়ংক্রিয়ভাবে পরিচালনা করার সুবিধা প্রদান করে। নিশ্চিত করুন যে ফায়ারবেস কনসোলের কলব্যাক ইউআরএলটি আপনার গিটহাব অ্যাপ্লিকেশনের ডেভেলপার কনসোলে একটি কলব্যাক ইউআরএল হিসেবে যুক্ত করা হয়েছে।

উদাহরণস্বরূপ:

একটি গিটহাব প্রোভাইডার তৈরি করুন এবং signInWithPopup মেথডে ক্রেডেনশিয়ালটি প্রদান করুন। এর ফলে একটি নতুন উইন্ডো প্রদর্শিত হবে, যা ব্যবহারকারীকে আপনার গিটহাব অ্যাপ্লিকেশনে সাইন-ইন করতে অনুরোধ করবে।

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

ইয়াহু

নিশ্চিত করুন যে Firebase Console- এ "Yahoo" সাইন-ইন প্রোভাইডারটি একটি API Key এবং API Secret সেট করে সক্রিয় করা আছে। এছাড়াও নিশ্চিত করুন যে আপনার Firebase OAuth রিডাইরেক্ট URI (যেমন my-app-12345.firebaseapp.com/__/auth/handler) আপনার অ্যাপের Yahoo ডেভেলপার নেটওয়ার্ক কনফিগারেশনে একটি রিডাইরেক্ট URI হিসেবে সেট করা আছে।

iOS+

শুরু করার আগে, iOS-এর জন্য Yahoo Login কনফিগার করুন এবং আপনার Runner-এ কাস্টম URL স্কিমগুলি যোগ করুন (ধাপ ১)

অ্যান্ড্রয়েড

শুরু করার আগে, অ্যান্ড্রয়েডের জন্য ইয়াহু লগইন কনফিগার করুন

আপনার অ্যাপের 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`

একটি প্রমাণীকরণ প্রদানকারী লিঙ্ক করা

যদি আপনি কোনো প্রোভাইডারকে বর্তমান ব্যবহারকারীর সাথে লিঙ্ক করতে চান, তাহলে আপনি নিম্নলিখিত পদ্ধতিটি ব্যবহার করতে পারেন:

await FirebaseAuth.instance.signInAnonymously();

final appleProvider = AppleAuthProvider();

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

  // You can also use `linkWithRedirect`
} else {
  await FirebaseAuth.instance.currentUser?.linkWithProvider(appleProvider);
}

// You're anonymous user is now upgraded to be able to connect with Sign In With Apple

প্রদানকারীর সাথে পুনরায় প্রমাণীকরণ করুন

একই প্যাটার্নটি 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