Вы можете разрешить пользователям выполнять аутентификацию в Firebase с помощью аккаунтов Twitter, добавив в приложение аутентификацию через Twitter. Это можно сделать, используя Firebase SDK для выполнения процесса входа или вручную выполнив процесс OAuth Twitter и передав полученный токен доступа и секрет в Firebase.
Подготовка
- Добавьте Firebase в свой проект JavaScript.
- В консоли Firebase выберите Безопасность > Аутентификация.
- На вкладке Способ входа включите поставщика для входа через Twitter.
-
Добавьте ключ API и секрет API из консоли разработчика поставщика в конфигурацию поставщика:
- Зарегистрируйте приложение как приложение для разработчиков в Twitter и получите ключ API и секрет API OAuth.
-
Убедитесь, что URI переадресации OAuth Firebase (например,
my-app-12345.firebaseapp.com/__/auth/handler) указан в качестве URL обратного вызова авторизации на странице настроек приложения в конфигурации приложения Twitter.
- Нажмите Сохранить.
Как обрабатывать процесс входа с помощью Firebase SDK
Если вы создаете веб-приложение, самый простой способ аутентификации пользователей с помощью аккаунтов Twitter в Firebase – реализовать процесс входа с помощью Firebase JavaScript SDK. (Если вы хотите аутентифицировать пользователя в Node.js или другой среде, отличной от браузера, вам нужно будет вручную реализовать процесс входа.)
Чтобы реализовать процесс входа с помощью Firebase JavaScript SDK, выполните следующие действия:
- Создайте экземпляр объекта поставщика Twitter:
Web
import { TwitterAuthProvider } from "firebase/auth"; const provider = new TwitterAuthProvider();
Web
var provider = new firebase.auth.TwitterAuthProvider();
- Необязательно. Чтобы локализовать поток 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();
- Необязательно. Укажите дополнительные специальные параметры поставщика OAuth, которые вы хотите отправлять с запросом OAuth. Чтобы добавить специальный параметр, вызовите метод
setCustomParametersдля инициализированного поставщика, передав объект, содержащий ключ, указанный в документации поставщика OAuth, и соответствующее значение. Пример:Зарезервированные обязательные параметры OAuth не допускаются и будут игнорироваться. Подробнее о поставщике аутентификации…Web
provider.setCustomParameters({ 'lang': 'es' });
Web
provider.setCustomParameters({ 'lang': 'es' });
- Выполните аутентификацию в Firebase с помощью объекта поставщика Twitter. Вы можете предложить пользователям войти в аккаунт Twitter, открыв всплывающее окно или перенаправив их на страницу входа. На мобильных устройствах рекомендуется использовать метод переадресации.
- Чтобы войти в систему с помощью всплывающего окна, вызовите функцию
signInWithPopup:Обратите внимание, что вы можете получить токен OAuth поставщика Twitter, который можно использовать для получения дополнительных данных с помощью API Twitter.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; // ... });
Здесь же можно выявлять и обрабатывать ошибки. Список кодов ошибок можно найти в справочной документации по аутентификации.
- Чтобы войти в аккаунт, перейдя на страницу входа, вызовите метод
signInWithRedirect. При использовании метода `signInWithRedirect` следуйте рекомендациям.Затем вы можете получить токен OAuth поставщика Twitter, вызвав функциюWeb
import { getAuth, signInWithRedirect } from "firebase/auth"; const auth = getAuth(); signInWithRedirect(auth, provider);
Web
firebase.auth().signInWithRedirect(provider);
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, обработав процесс входа, вызвав конечные точки Twitter OAuth:
- Добавьте в приложение аутентификацию через Twitter, следуя документации для разработчиков. В конце процесса входа в Twitter вы получите токен доступа OAuth и секретный код OAuth.
- Если вам нужно войти в приложение Node.js, отправьте в него токен доступа OAuth и секрет OAuth.
- После того как пользователь успешно войдет в аккаунт Twitter, обменяйте токен доступа OAuth и секрет OAuth на учетные данные Firebase:
var credential = firebase.auth.TwitterAuthProvider.credential(token, secret);
- Выполните аутентификацию в 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. });