Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

Аутентификация с использованием входа через Facebook с помощью JavaScript

Оптимизируйте свои подборки Сохраняйте и классифицируйте контент в соответствии со своими настройками.

Вы можете позволить своим пользователям аутентифицироваться в Firebase, используя свои учетные записи Facebook, интегрировав вход через Facebook в свое приложение. Вы можете интегрировать вход через Facebook либо с помощью Firebase SDK для выполнения процесса входа, либо путем выполнения процесса входа через Facebook вручную и передачи полученного токена доступа в Firebase.

Прежде чем вы начнете

  1. Добавьте Firebase в свой проект JavaScript .
  2. На сайте Facebook для разработчиков получите идентификатор приложения и секрет приложения для своего приложения.
  3. Включить вход через Facebook:
    1. В консоли Firebase откройте раздел Auth .
    2. На вкладке « Метод входа » включите метод входа через Facebook и укажите идентификатор приложения и секрет приложения , которые вы получили от Facebook.
    3. Затем убедитесь, что ваш URI перенаправления OAuth (например my-app-12345.firebaseapp.com/__/auth/handler ) указан как один из ваших URI перенаправления OAuth на странице настроек вашего приложения Facebook на сайте Facebook для разработчиков в Продукте . Настройки > Конфигурация входа через Facebook .

Обработка процесса входа с помощью Firebase SDK

Если вы создаете веб-приложение, самый простой способ аутентификации ваших пользователей в Firebase с использованием их учетных записей Facebook — это обработка процесса входа с помощью Firebase JavaScript SDK. (Если вы хотите аутентифицировать пользователя в Node.js или другой среде, отличной от браузера, вы должны выполнить вход вручную.)

Чтобы обработать процесс входа с помощью Firebase JavaScript SDK, выполните следующие действия:

  1. Создайте экземпляр объекта поставщика Facebook:

    Web version 9

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

    Web version 8

    var provider = new firebase.auth.FacebookAuthProvider();
  2. Необязательно : укажите дополнительные области действия OAuth 2.0, которые вы хотите запросить у поставщика проверки подлинности. Чтобы добавить область, вызовите addScope . Например:

    Web version 9

    provider.addScope('user_birthday');

    Web version 8

    provider.addScope('user_birthday');
    См. документацию поставщика аутентификации .
  3. Необязательно : чтобы локализовать поток OAuth поставщика на предпочитаемый пользователем язык без явной передачи соответствующих настраиваемых параметров OAuth, обновите код языка в экземпляре Auth перед запуском потока OAuth. Например:

    Web version 9

    import { getAuth } from "firebase/auth";
    
    const auth = getAuth();
    auth.languageCode = 'it';
    // To apply the default browser preference instead of explicitly setting it.
    // firebase.auth().useDeviceLanguage();

    Web version 8

    firebase.auth().languageCode = 'it';
    // To apply the default browser preference instead of explicitly setting it.
    // firebase.auth().useDeviceLanguage();
  4. Необязательно : укажите дополнительные настраиваемые параметры поставщика OAuth, которые вы хотите отправить с запросом OAuth. Чтобы добавить настраиваемый параметр, вызовите setCustomParameters для инициализированного поставщика с объектом, содержащим ключ, указанный в документации поставщика OAuth, и соответствующее значение. Например:

    Web version 9

    provider.setCustomParameters({
      'display': 'popup'
    });

    Web version 8

    provider.setCustomParameters({
      'display': 'popup'
    });
    Зарезервированные обязательные параметры OAuth не допускаются и будут игнорироваться. Дополнительные сведения см. в справочнике по поставщику аутентификации .
  5. Выполните аутентификацию в Firebase, используя объект поставщика Facebook. Вы можете предложить своим пользователям войти в систему со своими учетными записями Facebook, открыв всплывающее окно или перенаправив их на страницу входа. Метод перенаправления предпочтительнее на мобильных устройствах.
    • Чтобы войти с помощью всплывающего окна, вызовите signInWithPopup :

      Web version 9

      import { getAuth, signInWithPopup, FacebookAuthProvider } from "firebase/auth";
      
      const auth = getAuth();
      signInWithPopup(auth, provider)
        .then((result) => {
          // The signed-in user info.
          const user = result.user;
      
          // This gives you a Facebook Access Token. You can use it to access the Facebook API.
          const credential = FacebookAuthProvider.credentialFromResult(result);
          const accessToken = credential.accessToken;
      
          // ...
        })
        .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 version 8

      firebase
        .auth()
        .signInWithPopup(provider)
        .then((result) => {
          /** @type {firebase.auth.OAuthCredential} */
          var credential = result.credential;
      
          // The signed-in user info.
          var user = result.user;
      
          // This gives you a Facebook Access Token. You can use it to access the Facebook API.
          var accessToken = credential.accessToken;
      
          // ...
        })
        .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 поставщика Facebook, который можно использовать для получения дополнительных данных с помощью API Facebook.

      Здесь также можно ловить и обрабатывать ошибки. Список кодов ошибок можно найти в Справочной документации по аутентификации.

    • Чтобы войти, перенаправив на страницу входа, вызовите signInWithRedirect :

      Web version 9

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

      Web version 8

      firebase.auth().signInWithRedirect(provider);
      Затем вы также можете получить токен OAuth провайдера Facebook, вызвав getRedirectResult при загрузке вашей страницы:

      Web version 9

      import { getAuth, getRedirectResult, FacebookAuthProvider } from "firebase/auth";
      
      const auth = getAuth();
      getRedirectResult(auth)
        .then((result) => {
          // This gives you a Facebook Access Token. You can use it to access the Facebook API.
          const credential = FacebookAuthProvider.credentialFromResult(result);
          const token = credential.accessToken;
      
          const user = result.user;
        }).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;
          // AuthCredential type that was used.
          const credential = FacebookAuthProvider.credentialFromError(error);
          // ...
        });

      Web version 8

      firebase.auth()
        .getRedirectResult()
        .then((result) => {
          if (result.credential) {
            /** @type {firebase.auth.OAuthCredential} */
            var credential = result.credential;
      
            // This gives you a Facebook Access Token. You can use it to access the Facebook API.
            var token = credential.accessToken;
            // ...
          }
          // The signed-in user info.
          var user = result.user;
        }).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, вы должны добавить свой идентификатор расширения Chrome:

  1. Откройте свой проект в консоли Firebase .
  2. В разделе « Аутентификация » откройте страницу « Метод входа ».
  3. Добавьте URI, подобный следующему, в список авторизованных доменов:
    chrome-extension://CHROME_EXTENSION_ID
    .

Для расширений Chrome доступны только всплывающие операции ( signInWithPopup , linkWithPopup и reauthenticateWithPopup ), поскольку расширения Chrome не могут использовать перенаправления HTTP. Вы должны вызывать эти методы из сценария фоновой страницы, а не из всплывающего окна действия браузера, так как всплывающее окно проверки подлинности отменит всплывающее окно действия браузера. Методы всплывающих окон можно использовать только в расширениях, использующих Manifest V2 . В новом Manifest V3 разрешены только фоновые сценарии в виде сервис-воркеров, которые вообще не могут выполнять всплывающие окна.

Убедитесь, что в файле манифеста вашего расширения Chrome вы добавили URL-адрес https://apis.google.com в белый список content_security_policy .

Следующие шаги

После того, как пользователь входит в систему в первый раз, создается новая учетная запись пользователя и связывается с учетными данными, т. е. с именем пользователя и паролем, номером телефона или информацией о поставщике проверки подлинности, с которыми пользователь вошел в систему. Эта новая учетная запись хранится как часть вашего проекта Firebase и может использоваться для идентификации пользователя во всех приложениях вашего проекта, независимо от того, как пользователь входит в систему.

  • В ваших приложениях рекомендуемым способом узнать статус аутентификации вашего пользователя является установка наблюдателя на объект Auth . Затем вы можете получить основную информацию о профиле пользователя из объекта User . См. Управление пользователями .

  • В правилах безопасности базы данных Firebase Realtime и облачного хранилища вы можете получить уникальный идентификатор пользователя, вошедшего в систему, из переменной auth и использовать его для управления тем, к каким данным пользователь может получить доступ.

Вы можете разрешить пользователям входить в ваше приложение с помощью нескольких поставщиков проверки подлинности, связав учетные данные поставщика проверки подлинности с существующей учетной записью пользователя.

Чтобы выйти из системы, вызовите signOut :

Web version 9

import { getAuth, signOut } from "firebase/auth";

const auth = getAuth();
signOut(auth).then(() => {
  // Sign-out successful.
}).catch((error) => {
  // An error happened.
});

Web version 8

firebase.auth().signOut().then(() => {
  // Sign-out successful.
}).catch((error) => {
  // An error happened.
});