Uwierzytelnij się za pomocą Yahoo z JavaScript

Możesz pozwolić swoim użytkownikom na uwierzytelnianie w Firebase przy użyciu dostawców OAuth, takich jak Yahoo, integrując ogólne logowanie OAuth ze swoją aplikacją za pomocą pakietu SDK Firebase w celu przeprowadzenia kompleksowego procesu logowania.

Zanim zaczniesz

Aby logować użytkowników przy użyciu kont Yahoo, musisz najpierw włączyć Yahoo jako dostawcę logowania dla swojego projektu Firebase:

  1. Dodaj Firebase do swojego projektu JavaScript .
  2. W konsoli Firebase otwórz sekcję Uwierzytelnianie .
  3. Na karcie Metoda logowania włącz dostawcę Yahoo .
  4. Dodaj identyfikator klienta i klucz tajny klienta z konsoli programisty tego dostawcy do konfiguracji dostawcy:
    1. Aby zarejestrować klienta Yahoo OAuth, postępuj zgodnie z dokumentacją dla programistów Yahoo dotyczącą rejestrowania aplikacji internetowej w Yahoo .

      Pamiętaj, aby wybrać dwa uprawnienia OpenID Connect API: profile i email .

    2. Rejestrując aplikacje u tych dostawców, pamiętaj o zarejestrowaniu domeny *.firebaseapp.com dla swojego projektu jako domeny przekierowującej dla Twojej aplikacji.
  5. Kliknij Zapisz .

Obsługuj proces logowania za pomocą pakietu SDK Firebase

Jeśli tworzysz aplikację internetową, najprostszym sposobem uwierzytelnienia użytkowników w Firebase przy użyciu ich kont Yahoo jest obsługa całego procesu logowania za pomocą pakietu SDK JavaScript Firebase.

Aby obsłużyć proces logowania za pomocą pakietu SDK JavaScript Firebase, wykonaj następujące kroki:

  1. Utwórz instancję OAuthProvider , używając identyfikatora dostawcy yahoo.com .

    Web modular API

    import { OAuthProvider } from "firebase/auth";
    
    const provider = new OAuthProvider('yahoo.com');

    Web namespaced API

    var provider = new firebase.auth.OAuthProvider('yahoo.com');
  2. Opcjonalnie : określ dodatkowe niestandardowe parametry OAuth, które chcesz wysłać z żądaniem OAuth.

    Web modular API

    provider.setCustomParameters({
      // Prompt user to re-authenticate to Yahoo.
      prompt: 'login',
      // Localize to French.
      language: 'fr'
    });  

    Web namespaced API

    provider.setCustomParameters({
      // Prompt user to re-authenticate to Yahoo.
      prompt: 'login',
      // Localize to French.
      language: 'fr'
    });  

    Informacje na temat parametrów obsługiwanych przez Yahoo można znaleźć w dokumentacji Yahoo OAuth . Pamiętaj, że nie możesz przekazywać parametrów wymaganych przez Firebase za pomocą setCustomParameters() . Te parametry to id_klienta , redirect_uri , typ_odpowiedzi , zakres i stan .

  3. Opcjonalnie : określ dodatkowe zakresy protokołu OAuth 2.0 poza profile i email , o które chcesz poprosić dostawcę uwierzytelniania. Jeśli Twoja aplikacja wymaga dostępu do prywatnych danych użytkownika z interfejsów API Yahoo, musisz poprosić o uprawnienia do interfejsów API Yahoo w obszarze Uprawnienia API w konsoli programisty Yahoo. Żądane zakresy OAuth muszą dokładnie odpowiadać zakresom wstępnie skonfigurowanym w uprawnieniach interfejsu API aplikacji. Na przykład, jeśli do kontaktów użytkownika zażądano dostępu do odczytu/zapisu i wstępnie skonfigurowano go w uprawnieniach API aplikacji, należy przekazać sdct-w zamiast zakresu OAuth tylko do odczytu sdct-r . W przeciwnym razie przepływ nie powiedzie się, a użytkownikowi końcowemu zostanie wyświetlony błąd.

    Web modular API

    // Request access to Yahoo Mail API.
    provider.addScope('mail-r');
    // Request read/write access to user contacts.
    // This must be preconfigured in the app's API permissions.
    provider.addScope('sdct-w');

    Web namespaced API

    // Request access to Yahoo Mail API.
    provider.addScope('mail-r');
    // Request read/write access to user contacts.
    // This must be preconfigured in the app's API permissions.
    provider.addScope('sdct-w');

    Aby dowiedzieć się więcej, zapoznaj się z dokumentacją zakresów Yahoo .

  4. Uwierzytelnij się w Firebase przy użyciu obiektu dostawcy OAuth. Możesz poprosić użytkowników o zalogowanie się na swoje konta Yahoo, otwierając wyskakujące okienko lub przekierowując na stronę logowania. Na urządzeniach mobilnych preferowana jest metoda przekierowania.

    • Aby zalogować się za pomocą wyskakującego okna, wywołaj signInWithPopup :

      Web modular API

      import { getAuth, signInWithPopup, OAuthProvider } from "firebase/auth";
      
      const auth = getAuth();
      signInWithPopup(auth, provider)
        .then((result) => {
          // IdP data available in result.additionalUserInfo.profile
          // ...
      
          // Yahoo OAuth access token and ID token can be retrieved by calling:
          const credential = OAuthProvider.credentialFromResult(result);
          const accessToken = credential.accessToken;
          const idToken = credential.idToken;
        })
        .catch((error) => {
          // Handle error.
        });

      Web namespaced API

      firebase.auth().signInWithPopup(provider)
        .then((result) => {
          // IdP data available in result.additionalUserInfo.profile
          // ...
      
          /** @type {firebase.auth.OAuthCredential} */
          const credential = result.credential;
      
          // Yahoo OAuth access token and ID token can be retrieved by calling:
          var accessToken = credential.accessToken;
          var idToken = credential.idToken;
        })
        .catch((error) => {
          // Handle error.
        });
    • Aby zalogować się poprzez przekierowanie na stronę logowania, wywołaj signInWithRedirect :

    Postępuj zgodnie z najlepszymi praktykami podczas korzystania z signInWithRedirect , linkWithRedirect lub reauthenticateWithRedirect .

      firebase.auth().signInWithRedirect(provider);
      

    Gdy użytkownik zakończy logowanie i wróci na stronę, wynik logowania można uzyskać, wywołując funkcję getRedirectResult .

    Web modular API

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

    Web namespaced API

    firebase.auth().signInWithRedirect(provider);

    Po pomyślnym zakończeniu token identyfikatora OAuth i token dostępu powiązany z dostawcą można pobrać ze zwróconego obiektu firebase.auth.UserCredential .

    Korzystając z tokena dostępu OAuth, możesz wywołać API Yahoo .

    Na przykład, aby uzyskać podstawowe informacje o profilu, można wywołać następujący interfejs API REST:

    curl -i -H "Authorization: Bearer ACCESS_TOKEN" https://social.yahooapis.com/v1/user/YAHOO_USER_UID/profile?format=json
    

    Gdzie YAHOO_USER_UID to identyfikator użytkownika Yahoo, który można pobrać z pola firebase.auth().currentUser.providerData[0].uid lub z result.additionalUserInfo.profile .

  5. Chociaż powyższe przykłady skupiają się na przepływach logowania, możesz także połączyć dostawcę Yahoo z istniejącym użytkownikiem za pomocą linkWithPopup / linkWithRedirect . Na przykład możesz powiązać wielu dostawców z tym samym użytkownikiem, umożliwiając im logowanie się za pomocą dowolnego z nich.

    Web modular API

    import { getAuth, linkWithPopup, OAuthProvider } from "firebase/auth";
    
    const provider = new OAuthProvider('yahoo.com');
    const auth = getAuth();
    linkWithPopup(auth.currentUser, provider)
        .then((result) => {
          // Yahoo credential is linked to the current user.
          // IdP data available in result.additionalUserInfo.profile.
    
          // Get the OAuth access token and ID Token
          const credential = OAuthProvider.credentialFromResult(result);
          const accessToken = credential.accessToken;
          const idToken = credential.idToken;
        })
        .catch((error) => {
          // Handle error.
        });

    Web namespaced API

    var provider = new firebase.auth.OAuthProvider('yahoo.com');
    firebase.auth().currentUser.linkWithPopup(provider)
        .then((result) => {
          // Yahoo credential is linked to the current user.
          // IdP data available in result.additionalUserInfo.profile.
          // Yahoo OAuth access token can be retrieved by calling:
          // result.credential.accessToken
          // Yahoo OAuth ID token can be retrieved by calling:
          // result.credential.idToken
        })
        .catch((error) => {
          // Handle error.
        });
  6. Tego samego wzorca można użyć z reauthenticateWithPopup / reauthenticateWithRedirect , którego można użyć do pobrania nowych poświadczeń dla wrażliwych operacji wymagających niedawnego logowania.

    Web modular API

    import { getAuth, reauthenticateWithPopup, OAuthProvider } from "firebase/auth";
    
    const provider = new OAuthProvider('yahoo.com');
    const auth = getAuth();
    reauthenticateWithPopup(auth.currentUser, provider)
        .then((result) => {
          // User is re-authenticated with fresh tokens minted and
          // should be able to perform sensitive operations like account
          // deletion and email or password update.
          // IdP data available in result.additionalUserInfo.profile.
    
          // Get the OAuth access token and ID Token
          const credential = OAuthProvider.credentialFromResult(result);
          const accessToken = credential.accessToken;
          const idToken = credential.idToken;
        })
        .catch((error) => {
          // Handle error.
        });

    Web namespaced API

    var provider = new firebase.auth.OAuthProvider('yahoo.com');
    firebase.auth().currentUser.reauthenticateWithPopup(provider)
        .then((result) => {
          // User is re-authenticated with fresh tokens minted and
          // should be able to perform sensitive operations like account
          // deletion and email or password update.
          // IdP data available in result.additionalUserInfo.profile.
          // Yahoo OAuth access token can be retrieved by calling:
          // result.credential.accessToken
          // Yahoo OAuth ID token can be retrieved by calling:
          // result.credential.idToken
        })
        .catch((error) => {
          // Handle error.
        });

Uwierzytelnij się w Firebase w rozszerzeniu Chrome

Jeśli tworzysz aplikację rozszerzającą do Chrome, zapoznaj się z przewodnikiem Dokumenty pozaekranowe .

Następne kroki

Gdy użytkownik zaloguje się po raz pierwszy, zostanie utworzone nowe konto użytkownika i powiązane z poświadczeniami — czyli nazwą użytkownika i hasłem, numerem telefonu lub informacjami o dostawcy uwierzytelniania — za pomocą których użytkownik się zalogował. To nowe konto jest przechowywane jako część Twojego projektu Firebase i może służyć do identyfikowania użytkownika w każdej aplikacji w Twoim projekcie, niezależnie od tego, w jaki sposób użytkownik się loguje.

  • W aplikacjach zalecanym sposobem sprawdzenia stanu uwierzytelnienia użytkownika jest ustawienie obserwatora w obiekcie Auth . Następnie można uzyskać podstawowe informacje o profilu użytkownika z obiektu User . Zobacz Zarządzanie użytkownikami .

  • W regułach bezpieczeństwa bazy danych Firebase Realtime i Cloud Storage możesz uzyskać unikalny identyfikator zalogowanego użytkownika ze zmiennej auth i użyć go do kontrolowania, do jakich danych użytkownik może uzyskać dostęp.

Możesz zezwolić użytkownikom na logowanie się do aplikacji przy użyciu wielu dostawców uwierzytelniania, łącząc poświadczenia dostawcy uwierzytelniania z istniejącym kontem użytkownika.

Aby wylogować użytkownika, wywołaj funkcję signOut :

Web modular API

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

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

Web namespaced API

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