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:
- Dodaj Firebase do swojego projektu JavaScript .
- W konsoli Firebase otwórz sekcję Uwierzytelnianie .
- Na karcie Metoda logowania włącz dostawcę Yahoo .
- Dodaj identyfikator klienta i klucz tajny klienta z konsoli programisty tego dostawcy do konfiguracji dostawcy:
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
iemail
.- Rejestrując aplikacje u tych dostawców, pamiętaj o zarejestrowaniu domeny
*.firebaseapp.com
dla swojego projektu jako domeny przekierowującej dla Twojej aplikacji.
- 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:
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');
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 .Opcjonalnie : określ dodatkowe zakresy protokołu OAuth 2.0 poza
profile
iemail
, 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 odczytusdct-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 .
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
lubreauthenticateWithRedirect
.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 polafirebase.auth().currentUser.providerData[0].uid
lub zresult.additionalUserInfo.profile
.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. });
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ę rozszerzenia Chrome, musisz dodać identyfikator rozszerzenia Chrome:
- Otwórz swój projekt w konsoli Firebase .
- W sekcji Uwierzytelnianie otwórz stronę Metoda logowania .
- Dodaj identyfikator URI podobny do poniższego do listy autoryzowanych domen:
chrome-extension://CHROME_EXTENSION_ID
Tylko operacje na wyskakujących okienkach ( signInWithPopup
, linkWithPopup
i reauthenticateWithPopup
) są dostępne dla rozszerzeń Chrome, ponieważ rozszerzenia Chrome nie mogą korzystać z przekierowań HTTP. Powinieneś wywoływać te metody ze skryptu strony w tle, a nie z wyskakującego okienka akcji przeglądarki, ponieważ wyskakujące okienko uwierzytelniające anuluje wyskakujące okienko akcji przeglądarki. Metody wyskakujące mogą być używane tylko w rozszerzeniach korzystających z Manifest V2 . Nowszy Manifest V3 pozwala tylko na skrypty działające w tle w postaci pracowników usług, którzy w ogóle nie mogą wykonywać operacji w wyskakujących okienkach.
Upewnij się, że w pliku manifestu rozszerzenia Chrome dodałeś adres URL https://apis.google.com
do listy dozwolonych content_security_policy
.
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 obiektuUser
. 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. });