المصادقة باستخدام Twitter في JavaScript

يمكنك السماح للمستخدمين بالمصادقة باستخدام Firebase من خلال حسابات Twitter من خلال دمج مصادقة Twitter في تطبيقك. يمكنك دمج مصادقة Twitter إما باستخدام حزمة تطوير البرامج (SDK) لخدمة Firebase لتنفيذ عملية تسجيل الدخول، أو من خلال تنفيذ عملية OAuth في Twitter يدويًا ونقل رمز التفويض والمفتاح السري الناتجَين إلى Firebase.

قبل البدء

  1. أضِف Firebase إلى مشروع JavaScript.
  2. في وحدة تحكّم Firebase، افتح قسم Auth.
  3. في علامة التبويب طريقة تسجيل الدخول، فعِّل موفِّر Twitter.
  4. أضِف مفتاح واجهة برمجة التطبيقات وسر واجهة برمجة التطبيقات من وحدة تحكُّم المطوّر لدى موفِّر الخدمة إلى إعدادات موفِّر الخدمة:
    1. سجِّل تطبيقك كتطبيق مطوّر على Twitter واحصل على مفتاح واجهة برمجة التطبيقات ومفتاح سر واجهة برمجة التطبيقات لتطبيقك المزوّد ببروتوكول OAuth.
    2. تأكَّد من ضبط عنوان URL لإعادة التوجيه في OAuth (مثل my-app-12345.firebaseapp.com/__/auth/handler) في Firebase على أنّه عنوان URL لطلب إعادة التفويض في صفحة إعدادات تطبيقك ضمن إعدادات تطبيق Twitter.
  5. انقر على حفظ.

التعامل مع عملية تسجيل الدخول باستخدام حزمة تطوير البرامج (SDK) لمنصّة Firebase

إذا كنت بصدد إنشاء تطبيق ويب، فإنّ أسهل طريقة لمصادقة المستخدمين باستخدام Firebase باستخدام حساباتهم على Twitter هي معالجة عملية تسجيل الدخول باستخدام حزمة تطوير البرامج (SDK) لـ JavaScript في Firebase. (إذا كنت تريد مصادقة مستخدم في Node.js أو بيئة أخرى غير المتصفّح، عليك معالجة عملية تسجيل الدخول يدويًا).

لمعالجة عملية تسجيل الدخول باستخدام حزمة Firebase JavaScript SDK، اتّبِع الخطوات التالية:

  1. أنشئ مثيلًا لكائن موفّر Twitter:

    Web

    import { TwitterAuthProvider } from "firebase/auth";
    
    const provider = new TwitterAuthProvider();

    Web

    var provider = new firebase.auth.TwitterAuthProvider();
  2. اختياري: لتكييف مسار OAuth الخاص بالموفّر لتتوافق مع اللغة المفضّلة لدى المستخدم بدون ضبط مَعلمات OAuth المخصّصة ذات الصلة صراحةً، عدِّل رمز language في مثيل Auth قبل بدء مسار OAuth. على سبيل المثال:

    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();
  3. اختياري: حدِّد مَعلمات مخصّصة إضافية لمزوّد OAuth تريد إرسالها مع طلب OAuth. لإضافة مَعلمة مخصّصة، استخدِم الدالة setCustomParameters في مقدّم الخدمة الذي تمّ إعداده مع عنصر يحتوي على المفتاح كما هو محدّد في مستندات مقدّم خدمة OAuth والقيمة المقابلة. على سبيل المثال:

    Web

    provider.setCustomParameters({
      'lang': 'es'
    });

    Web

    provider.setCustomParameters({
      'lang': 'es'
    });
    لا يُسمح باستخدام مَعلمات OAuth المطلوبة المحجوزة وسيتم تجاهلها. اطّلِع على مرجع مزوّد المصادقة للحصول على مزيد من التفاصيل.
  4. يمكنك المصادقة باستخدام Firebase باستخدام عنصر مزوّد خدمة Twitter. يمكنك طلب تسجيل دخول المستخدمين باستخدام حساباتهم على Twitter إما من خلال فتح نافذة منبثقة أو من خلال إعادة التوجيه إلى صفحة تسجيل الدخول. يُفضَّل استخدام أسلوب إعادة التوجيه على الأجهزة الجوّالة.
    • لتسجيل الدخول باستخدام نافذة منبثقة، يُرجى الاتصال على signInWithPopup:

      Web

      import { getAuth, signInWithPopup, TwitterAuthProvider } from "firebase/auth";
      
      const auth = getAuth();
      signInWithPopup(auth, provider)
        .then((result) => {
          // This gives you a the Twitter OAuth 1.0 Access Token and Secret.
          // You can use these server side with your app's credentials to access the Twitter API.
          const credential = TwitterAuthProvider.credentialFromResult(result);
          const token = credential.accessToken;
          const secret = credential.secret;
      
          // The signed-in user info.
          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;
          // The AuthCredential type that was used.
          const credential = TwitterAuthProvider.credentialFromError(error);
          // ...
        });

      Web

      firebase
        .auth()
        .signInWithPopup(provider)
        .then((result) => {
          /** @type {firebase.auth.OAuthCredential} */
          var credential = result.credential;
      
          // This gives you a the Twitter OAuth 1.0 Access Token and Secret.
          // You can use these server side with your app's credentials to access the Twitter API.
          var token = credential.accessToken;
          var secret = credential.secret;
      
          // 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;
          // ...
        });
      يُرجى العلم أيضًا أنّه يمكنك استرداد رمز OAuth لموفّر Twitter الذي يمكن استخدامه لجلب بيانات إضافية باستخدام واجهات برمجة تطبيقات Twitter.

      يمكنك أيضًا من خلال هذا القسم رصد الأخطاء ومعالجتها. للحصول على قائمة برموز الأخطاء، يمكنك الاطّلاع على مستندات مرجعية حول المصادقة.

    • لتسجيل الدخول من خلال إعادة التوجيه إلى صفحة تسجيل الدخول، يمكنك استدعاء signInWithRedirect: اتّبِع أفضل الممارسات عند استخدام signInWithRedirect.

      Web

      import { getAuth, signInWithRedirect } from "firebase/auth";
      
      const auth = getAuth();
      signInWithRedirect(auth, provider);

      Web

      firebase.auth().signInWithRedirect(provider);
      بعد ذلك، يمكنك أيضًا استرداد رمز مفتاح OAuth لمقدّم خدمة Twitter من خلال استدعاء getRedirectResult عند تحميل صفحتك:

      Web

      import { getAuth, getRedirectResult, TwitterAuthProvider } from "firebase/auth";
      
      const auth = getAuth();
      getRedirectResult(auth)
        .then((result) => {
          // This gives you a the Twitter OAuth 1.0 Access Token and Secret.
          // You can use these server side with your app's credentials to access the Twitter API.
          const credential = TwitterAuthProvider.credentialFromResult(result);
          const token = credential.accessToken;
          const secret = credential.secret;
          // ...
      
          // The signed-in user info.
          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;
          // The AuthCredential type that was used.
          const credential = TwitterAuthProvider.credentialFromError(error);
          // ...
        });

      Web

      firebase.auth()
        .getRedirectResult()
        .then((result) => {
          if (result.credential) {
            /** @type {firebase.auth.OAuthCredential} */
            var credential = result.credential;
      
            // This gives you a the Twitter OAuth 1.0 Access Token and Secret.
            // You can use these server side with your app's credentials to access the Twitter API.
            var token = credential.accessToken;
            var secret = credential.secret;
            // ...
          }
      
          // 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;
          // ...
        });
      يمكنك أيضًا من خلال هذا القسم رصد الأخطاء ومعالجتها. للحصول على قائمة برموز الأخطاء، اطّلِع على مستندات مرجعية حول المصادقة.

التعامل مع عملية تسجيل الدخول يدويًا

يمكنك أيضًا المصادقة باستخدام Firebase باستخدام حساب على Twitter من خلال معالجة تدفق تسجيل الدخول من خلال طلب نقاط نهاية بروتوكول OAuth في Twitter:

  1. يمكنك دمج مصادقة Twitter في تطبيقك باتّباع مستندات المطوّرين. في نهاية عملية تسجيل الدخول إلى Twitter، سيصلك رمز دخول عبر OAuth وسر OAuth.
  2. إذا كنت بحاجة إلى تسجيل الدخول إلى تطبيق Node.js، أرسِل رمز دخول OAuth وكلمة مرور OAuth إلى تطبيق Node.js.
  3. بعد تسجيل دخول المستخدم بنجاح باستخدام Twitter، استبدِل رمز دخول OAuth وسر OAuth ببيانات اعتماد Firebase:
    var credential = firebase.auth.TwitterAuthProvider.credential(token, secret);
  4. يمكنك المصادقة باستخدام Firebase باستخدام بيانات اعتماد Firebase:

    Web

    import { getAuth, signInWithCredential, FacebookAuthProvider } from "firebase/auth";
    
    // Sign in with the credential from the Facebook user.
    const auth = getAuth();
    signInWithCredential(auth, credential)
      .then((result) => {
        // Signed in 
        const credential = FacebookAuthProvider.credentialFromResult(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

    // Sign in with the credential from the Facebook user.
    firebase.auth().signInWithCredential(credential)
      .then((result) => {
        // Signed in       
        var credential = result.credential;
        // ...
      })
      .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;
        // ...
      });

المصادقة باستخدام Firebase في إضافة Chrome

إذا كنت بصدد إنشاء تطبيق إضافة Chrome، يمكنك الاطّلاع على دليل "المستندات التي لا تظهر على الشاشة".

الخطوات التالية

بعد أن يسجّل المستخدم الدخول لأول مرة، يتم إنشاء حساب مستخدم جديد وربطه ببيانات الاعتماد التي استخدمها المستخدم لتسجيل الدخول، أي اسم المستخدم وكلمة المرور أو رقم الهاتف أو معلومات مقدّم خدمة المصادقة. يتم تخزين هذا الحساب الجديد كجزء من مشروعك على Firebase، ويمكن استخدامه لتحديد هوية مستخدم في كل تطبيق في مشروعك، بغض النظر عن كيفية تسجيل دخول المستخدم.

  • في تطبيقاتك، الطريقة المقترَحة لمعرفة حالة مصادقة المستخدم هي ضبط مراقب على عنصر Auth. يمكنك بعد ذلك الحصول على معلومات الملف الشخصي الأساسية للمستخدم من عنصر User. راجِع إدارة المستخدمين.

  • في Firebase Realtime Database وCloud Storage قواعد الأمان، يمكنك الحصول على معرّف المستخدم الفريد للمستخدم الذي سجّل الدخول من متغيّر auth، واستخدامه للتحكّم في البيانات التي يمكن للمستخدم الوصول إليها.

يمكنك السماح للمستخدمين بتسجيل الدخول إلى تطبيقك باستخدام عدة موفّري مصادقة من خلال ربط بيانات اعتماد موفّر المصادقة بحساب مستخدمحالٍ.

لتسجيل خروج مستخدم، اتصل بالرقم 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.
});