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

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

قبل البدء

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

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

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

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

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

    Web

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

    Web

    var provider = new firebase.auth.TwitterAuthProvider();
  2. اختياري: لتوطين عملية OAuth الخاصة بمقدّم الخدمة لتتطابق مع اللغة المفضّلة لدى المستخدم بدون تمرير مَعلمات OAuth المخصّصة ذات الصلة بشكل صريح، عدِّل رمز اللغة في مثيل 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.

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

    • لتسجيل الدخول عن طريق إعادة التوجيه إلى صفحة تسجيل الدخول، استدعِ الدالة 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;
          // ...
        });
      يمكنك أيضًا رصد الأخطاء والتعامل معها في هذا القسم. للاطّلاع على قائمة برموز الخطأ، يمكنك الرجوع إلى مستندات Auth المرجعية.

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

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

  1. يمكنك دمج عملية المصادقة على Twitter في تطبيقك باتّباع مستندات المطوّرين. في نهاية عملية تسجيل الدخول باستخدام Twitter، ستتلقّى رمز دخول OAuth وكلمة سر OAuth.
  2. إذا كنت بحاجة إلى تسجيل الدخول إلى تطبيق Node.js، أرسِل رمز الدخول المميز وبروتوكول OAuth إلى تطبيق Node.js.
  3. بعد أن يسجّل المستخدم الدخول بنجاح باستخدام Twitter، استبدِل رمز الدخول وسر 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.
});