Einfache Firebase -Authentifizierung für alle nächsten.js -Rendering -Strategien.
Dieses Paket macht es einfach, das authentifizierte Firebase-Benutzer- und ID-Token während der clientseitigen und serverseitigen Rendering (SSR) zu erhalten.
Wir behandeln die Firebase JS SDK als Quelle der Wahrheit für den Auth -Status. Wenn sich der Benutzer anmeldet, rufen wir einen Endpunkt an, um ein Aktualisierungstoken zu generieren und die Benutzerinformationen, das ID -Token und das Aktualisieren von Token in Cookies zu speichern. Zukünftige Anfragen an SSR -Seiten erhalten die Benutzerinformationen und ID -Token von Cookies und erfrischen Sie das ID -Token bei Bedarf. Wenn sich der Benutzer anmeldet, haben wir die Cookies nicht festgelegt.
Siehe eine Live -Demo der Beispiel -App.
Abhängig von den Anforderungen Ihrer App können andere Ansätze für Sie besser funktionieren.
Wenn Ihre App nur statische Seiten verwendet oder den FireBase -Benutzer für SSR nicht benötigt, verwenden Sie den Firebase JS SDK direkt, um den Benutzer auf der Client -Seite zu laden.
getServerSideProps verwenden.Wenn Ihre App den Firebase -Benutzer für SSR benötigt (aber die ID -Token -Serverseite nicht benötigt) , können Sie einen dieser Ansätze in Betracht ziehen:
Wenn Ihre App eine generalisierte Authentifizierungslösung benötigt - nicht speziell für die Firebase -Authentifizierung -, können Sie in Betracht ziehen, NextAuth.js zu verwenden. NextAuth.js verwendet keine Firebase -Authentifizierung, unterstützt jedoch eine Vielzahl von Identitätsanbietern, einschließlich Google. Lesen Sie hier mehr über die Unterschiede zwischen next-firebase-auth und der Auth.js, um zu sehen, welche für Ihre Bedürfnisse am besten geeignet sind.
Wenn Ihre App den App -Router von Next.js verwendet, unterstützt dieses Paket es noch nicht. Sie können den Fortschritt in #568 befolgen.
Dieses Paket ist wahrscheinlich hilfreich, wenn Sie erwarten, dass Sie sowohl statische Seiten als auch SSR verwenden oder wenn Sie Zugriff auf Firebase ID Tokens Server -Seite benötigen.
Eine kurze Notiz darüber, was dieses Paket nicht tut:
- Es bietet keine Authentifizierungs -Benutzeroberfläche. Betrachten Sie Firebaseui-Web oder bauen Sie Ihre eigenen.
- Es erweitert die Firebase -Funktionalität nicht über den universellen Zugriff auf den authierten Benutzer. Verwenden Sie den Firebase Admin SDK und den Firebase JS SDK für alle anderen Anforderungen.
Installieren:
yarn add next-firebase-auth oder npm i next-firebase-auth
Stellen Sie sicher, dass Peer -Abhängigkeiten ebenfalls installiert sind:
yarn add firebase firebase-admin next react react-dom
Erstellen Sie ein Modul zum Initialisieren von next-firebase-auth .
Weitere Informationen finden Sie unter Konfigurationsdokumentation
// ./initAuth.js
import { initializeApp } from 'firebase/app'
import { init } from 'next-firebase-auth'
const initAuth = ( ) => {
const firebaseClientInitConfig = {
apiKey : 'MyExampleAppAPIKey123' , // required
authDomain : 'my-example-app.firebaseapp.com' ,
databaseURL : 'https://my-example-app.firebaseio.com' ,
projectId : 'my-example-app-id' ,
}
initializeApp ( firebaseClientInitConfig )
init ( {
authPageURL : '/auth' ,
appPageURL : '/' ,
loginAPIEndpoint : '/api/login' ,
logoutAPIEndpoint : '/api/logout' ,
onLoginRequestError : ( err ) => {
console . error ( err )
} ,
onLogoutRequestError : ( err ) => {
console . error ( err )
} ,
firebaseAuthEmulatorHost : 'localhost:9099' ,
firebaseAdminInitConfig : {
credential : {
projectId : 'my-example-app-id' ,
clientEmail : '[email protected]' ,
// The private key must not be accessible on the client side.
privateKey : process . env . FIREBASE_PRIVATE_KEY ,
} ,
databaseURL : 'https://my-example-app.firebaseio.com' ,
} ,
// Use application default credentials (takes precedence over firebaseAdminInitConfig if set)
// useFirebaseAdminDefaultCredential: true,
firebaseClientInitConfig ,
// tenantId: 'example-tenant-id', // Optional, only necessary in multi-tenant configuration
cookies : {
name : 'ExampleApp' , // required
// Keys are required unless you set `signed` to `false`.
// The keys cannot be accessible on the client side.
keys : [
process . env . COOKIE_SECRET_CURRENT ,
process . env . COOKIE_SECRET_PREVIOUS ,
] ,
httpOnly : true ,
maxAge : 12 * 60 * 60 * 24 * 1000 , // twelve days
overwrite : true ,
path : '/' ,
sameSite : 'strict' ,
secure : true , // set this to false in local (non-HTTPS) development
signed : true ,
} ,
onVerifyTokenError : ( err ) => {
console . error ( err )
} ,
onTokenRefreshError : ( err ) => {
console . error ( err )
} ,
} )
}
export default initAuth Setzen Sie die privaten Umgebungsvariablen FIREBASE_PRIVATE_KEY , COOKIE_SECRET_CURRENT und COOKIE_SECRET_PREVIOUS in .env.local . Wenn Sie den Firebase Authentication -Emulator aktiviert haben, müssen Sie auch die Umgebungsvariable FIREBASE_AUTH_EMULATOR_HOST festlegen.
Initialisieren Sie next-firebase-auth in _app.js :
// ./pages/_app.js
import initAuth from '../initAuth' // the module you created above
initAuth ( )
function MyApp ( { Component , pageProps } ) {
return < Component { ... pageProps } />
}
export default MyAppErstellen Sie Anmelde- und Abmelden -API -Endpunkte, die Auth Cookies festlegen:
// ./pages/api/login
import { setAuthCookies } from 'next-firebase-auth'
import initAuth from '../../initAuth' // the module you created above
initAuth ( )
const handler = async ( req , res ) => {
try {
await setAuthCookies ( req , res )
} catch ( e ) {
return res . status ( 500 ) . json ( { error : 'Unexpected error.' } )
}
return res . status ( 200 ) . json ( { success : true } )
}
export default handler // ./pages/api/logout
import { unsetAuthCookies } from 'next-firebase-auth'
import initAuth from '../../initAuth' // the module you created above
initAuth ( )
const handler = async ( req , res ) => {
try {
await unsetAuthCookies ( req , res )
} catch ( e ) {
return res . status ( 500 ) . json ( { error : 'Unexpected error.' } )
}
return res . status ( 200 ) . json ( { success : true } )
}
export default handlerVerwenden Sie schließlich den authentifizierten Benutzer in einer Seite:
// ./pages/demo
import React from 'react'
import {
useUser ,
withUser ,
withUserTokenSSR ,
} from 'next-firebase-auth'
const Demo = ( ) => {
const user = useUser ( )
return (
< div >
< p > Your email is { user . email ? user . email : 'unknown' } . </ p >
</ div >
)
}
// Note that this is a higher-order function.
export const getServerSideProps = withUserTokenSSR ( ) ( )
export default withUser ( ) ( Demo ) init(config) Initialisiert next-firebase-auth und nehmen Sie ein Konfigurationsobjekt.
withUser({ ...options })(PageComponent) Eine Funktion höherer Ordnung, um dem User einer Komponente zu liefern. Verwenden Sie diese mit einer beliebigen Next.js -Seite, auf der über den useUser auf den authierten Benutzer zugreifen. Optional kann es die clientseitige Weiterleitung basierend auf dem Auth-Status des Benutzers umleiten.
Es akzeptiert die folgenden Optionen:
| Option | Beschreibung | Standard |
|---|---|---|
whenAuthed | Die Maßnahme, die ergriffen werden soll, wenn der Benutzer authentifiziert ist. Eine von AuthAction.RENDER oder AuthAction.REDIRECT_TO_APP . | AuthAction.RENDER |
whenAuthedBeforeRedirect | Die Aktion, die er ergreifen muss, während der Browser umleitet. Relevant, wenn der Benutzer authentifiziert ist und wenn authated auf die Autorität gesetzt wird.Redirect_to_App. Einer von: AuthAction.RENDER oder AuthAction.SHOW_LOADER oder AuthAction.RETURN_NULL . | AuthAction.RETURN_NULL |
whenUnauthedBeforeInit | Die Maßnahme, die ergriffen werden muss, wenn der Benutzer nicht authentifiziert ist, aber der Firebase Client JS SDK ist noch nicht initialisiert. Einer von: AuthAction.RENDER , AuthAction.REDIRECT_TO_LOGIN , AuthAction.SHOW_LOADER . | AuthAction.RENDER |
whenUnauthedAfterInit | Die Maßnahme, die ergriffen werden soll, wenn der Benutzer nicht authentifiziert ist und der Firebase Client JS SDK bereits initialisiert wurde. Einer von: AuthAction.RENDER , AuthAction.REDIRECT_TO_LOGIN . | AuthAction.RENDER |
appPageURL | Die URL der Umleitungsziel, wenn wir in die App umleiten sollten. Eine Seiteurl. | config.appPageURL |
authPageURL | Die URL der Umleitungsziel, wenn wir auf die Anmeldeseite umleiten sollten. Eine Seiteurl. | config.authPageURL |
LoaderComponent | Die Komponente, die zu rendern, wenn der Benutzer nicht automatisch ist, und whenUnauthedBeforeInit wird auf AuthAction.SHOW_LOADER gesetzt. | NULL |
Beispielsweise wird diese Seite auf die Anmeldeseite weitergeleitet, wenn der Benutzer nicht authentifiziert ist:
import { withUser , AuthAction } from 'next-firebase-auth'
const DemoPage = ( ) => < div > My demo page </ div >
export default withUser ( {
whenUnauthedAfterInit : AuthAction . REDIRECT_TO_LOGIN ,
authPageURL : '/my-login-page/' ,
} ) ( DemoPage )Hier ist ein Beispiel für eine Anmeldeseite, die einen Loader anzeigt, bis Firebase initialisiert ist, und dann in die App weiterleitet, wenn der Benutzer bereits angemeldet ist:
import { withUser , AuthAction } from 'next-firebase-auth'
const MyLoader = ( ) => < div > Loading... </ div >
const LoginPage = ( ) => < div > My login page </ div >
export default withUser ( {
whenAuthed : AuthAction . REDIRECT_TO_APP ,
whenUnauthedBeforeInit : AuthAction . SHOW_LOADER ,
whenUnauthedAfterInit : AuthAction . RENDER ,
LoaderComponent : MyLoader ,
} ) ( LoginPage )Schauen Sie sich hier einen Blick darauf an.
withUserTokenSSR({ ...options })(getServerSidePropsFunc = ({ user }) => {}) Eine Funktion höherer Ordnung, die die getServerSideProps -Funktion von Next.js Pages umhüllt, um den User während des serverseitigen Renders bereitzustellen. Optional kann es basierend auf dem Auth-Status des Benutzers eine serverseitige Weiterleitung. Eine verpackte Funktion ist optional; Wenn dies bereitgestellt wird, wird es mit einem context aufgerufen, das eine user enthält.
Es akzeptiert die folgenden Optionen:
| Option | Beschreibung | Standard |
|---|---|---|
whenAuthed | Die Maßnahme, die ergriffen werden soll, wenn der Benutzer authentifiziert ist. Entweder AuthAction.RENDER oder AuthAction.REDIRECT_TO_APP . | AuthAction.RENDER |
whenUnauthed | Die Maßnahme, die ergriffen werden soll, wenn der Benutzer nicht authentifiziert ist. Entweder AuthAction.RENDER oder AuthAction.REDIRECT_TO_LOGIN . | AuthAction.RENDER |
appPageURL | Die URL der Umleitungsziel, wenn wir in die App umleiten sollten. Eine Seiteurl. | config.appPageURL |
authPageURL | Die URL der Umleitungsziel, wenn wir auf die Anmeldeseite umleiten sollten. Eine Seiteurl. | config.authPageURL |
Diese Seite wird beispielsweise SSR für authentifizierte Benutzer erhalten, Requisiten mithilfe ihres Firebase-ID-Tokens abrufen und serverseitig zur Anmeldeseite umleiten, wenn der Benutzer nicht authentifiziert ist:
import {
useUser ,
withUser ,
withUserTokenSSR ,
} from 'next-firebase-auth'
const DemoPage = ( { thing } ) => < div > The thing is: { thing } </ div >
export const getServerSideProps = withUserTokenSSR ( {
whenUnauthed : AuthAction . REDIRECT_TO_LOGIN ,
} ) ( async ( { user } ) => {
// Optionally, get other props.
const token = await user . getIdToken ( )
const response = await fetch ( '/api/my-endpoint' , {
method : 'GET' ,
headers : {
Authorization : token ,
} ,
} )
const data = await response . json ( )
return {
props : {
thing : data . thing ,
} ,
}
} )
export default withUser ( ) ( DemoPage ) withUserSSR({ ...options })(getServerSidePropsFunc = ({ user }) => {}) Verhält sich nahezu identisch mit withUserTokenSSR , mit einem Schlüsselunterschied: Der user enthält kein ID -Token.
Diese Methode basiert auf authierten Benutzerdaten eines Cookie, anstatt ein FireBase -ID -Token zu überprüfen oder zu aktualisieren. Folglich:
user wird bei NULL, wenn Sie user.getIdToken() anrufen, behoben.withUserTokenSSR ist.withUserTokenSSR verwenden.cookies.signed auf false eingestellt ist. Dies ist ein potenzielles Sicherheitsrisiko, da die Authanded User Cookie -Werte vom Client geändert werden könnten.
Dies erfordert die gleichen Optionen wie withUserTokenSSR .
useUser() Ein Haken, der den aktuellen user zurückgibt. Um dies zu verwenden, muss die nächste.js -Seite mit withUser eingewickelt werden. Wenn der Benutzer nicht authentifiziert ist, gibt useUser eine User mit einer Null id zurück.
Zum Beispiel:
import { useUser , withUser } from 'next-firebase-auth'
const Demo = ( ) => {
const user = useUser ( )
return (
< div >
< p > Your email is { user . email ? user . email : 'unknown' } . </ p >
</ div >
)
}
export default withUser ( ) ( Demo ) setAuthCookies(req, res)Legt Cookies fest, um die Informationen des authentifizierten Benutzers zu speichern. Rufen Sie dies von Ihrem "Login" -API -Endpunkt aus.
Cookies werden mit cookies verwaltet. Siehe die Konfiguration für Cookie -Optionen.
Das req -Argument sollte ein IncomingMessage sein. Das res -Argument sollte ein ServerResponse / Next.js -Antwortobjekt sein. Es ist erforderlich, dass der Header für Authorization auf das Firebase User ID -Token eingestellt wird, das dieses Paket automatisch behandelt.
Dies kann nur auf der Serverseite aufgerufen werden.
unsetAuthCookies(req, res)Absets (läuft ab) die Auth Cookies. Rufen Sie dies von Ihrem "Abmeldung" -API -Endpunkt aus.
Das req -Argument sollte ein IncomingMessage sein. Das res -Argument sollte ein ServerResponse / Next.js -Antwortobjekt sein.
Dies kann nur auf der Serverseite aufgerufen werden.
verifyIdToken(token) => Promise<User> Überprüft ein FireBase -ID -Token und bezieht sich auf eine User . Dies dient einem ähnlichen Zweck wie VerifyidToken von Firebase Admin SDK.
getUserFromCookies({ ...options })In v1 hinzugefügt
Überprüft und gibt den user von Auth Cookies zurück. Dies ist eine Alternative zu verifyIdToken , die den Benutzer von einem ID -Token überprüft.
Im Allgemeinen empfehlen wir, dass API -Endpunkte eher ein ID -Token als Cookies verwenden, um den Benutzer zu identifizieren, wodurch einige potenzielle CSRF -Schwachstellen vermieden werden. Diese Methode ist jedoch hilfreich für Endpunkte, die sich ausschließlich auf Cookie -Werte verlassen müssen, um den Benutzer zu identifizieren.
Dies kann nur auf der Serverseite aufgerufen werden.
Weitere Informationen zur Verwendung dieses Beispiels finden Sie in einer eigenständigen Backend -Umgebung außerhalb von Next.js.
Das Argument der Optionen kann umfassen:
Object - ein IncomingMessage / Next.js -Anforderungsobjekt
Ein Anforderungsobjekt, dessen cookie -Header -Wert verwendet wird, um einen Benutzer zu überprüfen. Entweder sind der req -Wert oder authCookieValue erforderlich.
Boolean
Ob der zurückgegebene Benutzer ein FireBase -ID -Token enthalten sollte oder nicht. Standardmäßig true. Wenn wahr, folgt das Verhalten dem von withUserTokenSSR ; Wenn falsch, folgt es dem von withUserSSR . Lesen Sie mehr über die Unterscheidung in den Dokumenten für WithusersSR.
String
Als Alternative zur Bereitstellung des req -Objekts können Sie den zu verwendenden Auth Cookie -Wert direkt angeben. Wenn Ihr Auth -Cookie beispielsweise MyAuth heißt, würden Sie den Wert des Cookie MyAuth.AuthUser (falls includeToken falsch ist) oder MyAuth.AuthUserTokens (falls includeToken ist wahr) angeben.
Entweder sind der req -Wert oder authCookieValue erforderlich.
String
Der Wert der Signatur des Auth Cookies, bei Verwendung von signierten Cookies. Wenn Ihr Auth -Cookie beispielsweise MyAuth heißt, würden Sie den Wert des Cookie MyAuth.AuthUser.sig (falls includeToken falsch ist) oder MyAuth.AuthUserTokens.sig (falls includeToken is wahr) angeben.
AuthAction Ein Objekt, das Rendering/Redirecting -Optionen für withUser und withUserTokenSSR definiert. Siehe Autorität.
Eine Beispielkonfiguration finden Sie hier. Geben Sie die Konfiguration an, wenn Sie init aufrufen.
String|Function|Object - eine Seiteurl
Die Standard -URL zum Navigieren, wenn withUser oder withUserTokenSSR zum Anmeldung umleiten muss. Optional, es sei denn, die AuthAction.REDIRECT_TO_LOGIN verwendet.
String|Function|Object - eine Seiteurl
Die Standard -URL zum Navigieren, wenn withUser oder withUserTokenSSR in die App umleiten muss. Optional, es sei denn, die AuthAction.REDIRECT_TO_APP verwendet.
String
Der API -Endpunkt dieses Moduls wird aufgerufen, wenn der Auth -Status für einen authentifizierten Firebase -Benutzer ändert.
String
Der API -Endpunkt dieses Moduls wird aufgerufen, wenn sich der Auth -Status für einen nicht authentifizierten Firebase -Benutzer ändert.
Function (optional)
Ein Handler angerufen, wenn der Endpunkt der Anmelde-API eine Nicht-200-Antwort zurückgibt. Wenn ein Handler nicht definiert ist, wird diese Bibliothek nicht 200-Antworten aufgenommen.
Nicht verwendet oder erlaubt, wenn ein benutzerdefinierter tokenChangedHandler eingestellt ist.
Function (optional)
Ein Handler angerufen, wenn der Endpunkt des Abmeldes-API eine Nicht-200-Antwort zurückgibt. Wenn ein Handler nicht definiert ist, wird diese Bibliothek nicht 200-Antworten aufgenommen.
Nicht verwendet oder erlaubt, wenn ein benutzerdefinierter tokenChangedHandler eingestellt ist.
Function
Ein Rückruf, der ausgeführt wird, wenn der Auth -Status für einen bestimmten Benutzer ändert. Verwenden Sie dies, wenn Sie anpassen möchten, wie Ihre Client-Side-App Ihre Anmeldungs-/Abmelden-API-Endpunkte aufruft (z. B. um einen benutzerdefinierten Fetcher zu verwenden oder benutzerdefinierte Header hinzuzufügen). tokenChangedHandler empfängt einen User als Argument und wird aufgerufen, wenn sich das ID -Token des Benutzers ändert, ähnlich wie bei Firebases onIdTokenChanged -Ereignis.
Wenn dieser Rückruf angegeben ist, ist der Benutzer verantwortlich für:
Die Anleitung finden Sie im Standardhandler.
String
Der Host und der Port für den lokalen Firebase Auth Emulator. Wenn dieser Wert festgelegt ist, wird der Auth -Emulator mit dem bereitgestellten Host und Port initialisiert.
Muss mit dem Wert der Umgebungsvariablen FIREBASE_AUTH_EMULATOR_HOST , z. B. localhost:9099 übereinstimmen.
Object
Konfiguration übergeben an firebase-admin initializeApp . Es sollte eine credential (ein einfaches Objekt) und eine databaseURL -Eigenschaft enthalten. Erforderlich , es sei denn, Sie initialisieren Sie firebase-admin selbst, bevor Sie next-firebase-auth initialisieren.
Der firebaseAdminInitConfig.credential.privateKey kann nicht auf der Kundenseite definiert werden und sollte in einer geheimen Umgebungsvariablen leben.
Verwenden Sie Vercel? Siehe Hinzufügen eines privaten Schlüssels zu Vercel, um Anleitung zu erhalten.
Boolean
Wenn es zutrifft, findet firebase-admin implizit Ihr Hosting-Umgebungsservice-Konto während initializeApp . Dies gilt sowohl für Firebase- als auch für die Google Cloud -Plattform und empfohlen, den Code über den Dateipfad oder den direkten Wert hinzuzufügen.
Hinweis : Zum Einrichten firebase-admin müssen entweder firebaseAdminInitConfig oder useFirebaseAdminDefaultCredential bereitgestellt werden. Unter Verwendung der Standard -Anmeldeinformationen überschreiben Sie die Werte überschreiben, die an firebaseAdminInitConfig.credential .
Object
Konfigurationsanpassung von Firebase JS SDKs initializeApp . Der Wert firebaseClientInitConfig.apiKey ist immer erforderlich . Wir empfehlen, den Firebase Client SDK selbst zu initialisieren, bevor Sie next-firebase-auth initialisieren. next-firebase-auth wird jedoch versuchen, Firebase zu initialisieren, wenn eine Firebase-App noch nicht vorhanden ist.
Object
Einstellungen für Auth Cookies. Wir verwenden cookies , um Cookies zu verwalten.
Eigenschaften umfassen:
name : Wird als Basis für Cookie -Namen verwendet: Wenn name auf "Myexample" gesetzt ist, werden Cookies mit MyExample.AuthUser und MyExample.AuthUserTokens bezeichnet (plus MyExample.AuthUser.sig und MyExample.AuthUserTokens.sig wenn Cookies signiert sind). Erforderlich.keys : Eine Reihe von Zeichenfolgen, mit denen Cookies unter Vertrag genommen werden; Zum Beispiel ['xD$WVv3qrP3ywY', '2x6#msoUeNhVHr'] . Da diese Saiten Geheimnisse sind, geben Sie sie über geheime Umgebungsvariablen wie [ process.env.COOKIE_SECRET_CURRENT, process.env.COOKIE_SECRET_PREVIOUS ] . Das keys wird wie im cookies -Paket beschrieben an den Keygrip -Konstruktor übergeben. Erforderlich , sofern nicht signed , ist auf false eingestellt.cookies.set . Der Schlüsselwert keys kann nicht auf der Client -Seite definiert werden und sollte in einer geheimen Umgebungsvariablen leben.
Für die Sicherheit muss der maxAge zwei Wochen oder weniger betragen. Beachten Sie, dass maxAge in Millisekunden definiert ist.
Hinweis: Die Ablauf der Cookies werden automatisch erweitert, wenn der Benutzer die Firebase JS SDK lädt.
Der Firebase JS SDK ist die Quelle der Wahrheit für die Authentifizierung. Wenn die Cookies also auslaufen, der Benutzer jedoch immer noch mit Firebase authentiert, werden die Cookies automatisch erneut festgelegt, wenn der Benutzer die Firebase JS SDK lädt.
Function (optional)
Fehlerhandler, der aufgerufen wird, wenn ein unerwarteter Fehler bei der Überprüfung der ID -Token -Serverseite des Benutzers vorliegt. Es wird einen FireBase -Auth -Fehler erhalten.
Diese Bibliothek wird nicht werfen, wenn sie kein ID -Token überprüfen kann. Stattdessen bietet es der App einen nicht authentifizierten Benutzer. Es werden in der Regel gängige Auth-bezogene Fehler wie auth/id-token-expired und auth/user-disabled ohne Werfen behandelt. Weitere Informationen finden Sie unter #366 und #174.
Function (optional)
Fehlerhandler, der aufgerufen wird, wenn ein unerwarteter Fehler beim Aktualisieren der ID -Token -Serverseite des Benutzers vorliegt.
Diese Bibliothek wird nicht werfen, wenn sie einen ID -Token nicht aktualisieren kann. Stattdessen bietet es der App einen nicht authentifizierten Benutzer. Weitere Informationen finden Sie unter #366 und #174.
Definiert Aktionen, die abhängig vom Auth -Status eines Benutzers unter Verwendung der folgenden Konstanten erfolgen sollen:
AuthAction.RENDER : Rendern Sie die untergeordnete Komponente
AuthAction.SHOW_LOADER : Zeigen Sie eine Loader -Komponente an
AuthAction.RETURN_NULL : Null anstelle einer Komponente zurückgeben
AuthAction.REDIRECT_TO_LOGIN : Umleiten Sie auf die Anmeldeseite
AuthAction.REDIRECT_TO_APP : Umleiten Sie die App weiter
Das Benutzerobjekt wird in den serverseitigen und clientseitigen Kontexten verwendet. Dies ist eine normalisierte Darstellung eines Feuerbasis -Benutzers.
ID - String|null
Die ID des Firebase -Benutzers oder NULL, wenn der Benutzer nicht authentifiziert ist.
E -Mail - String|null
Die E -Mail -Adresse des Firebase -Benutzers oder NULL, wenn der Benutzer keine E -Mail -Adresse hat.
E -Mailverified - Boolean
Ob die E -Mail -Adresse des Benutzers überprüft wird.
PhoneNumber - String|null
Hinzugefügt in v0.13.1
Die Telefonnummer des Firebase -Benutzers oder NULL, wenn der Benutzer keine Telefonnummer hat.
DisplayName - String|null
Hinzugefügt in v0.13.1
Der Anzeigename des Firebase -Benutzers oder NULL, wenn der Benutzer keinen Anzeigenamen hat.
Photourl - String|null
Hinzugefügt in v0.13.1
Die Foto -URL des Firebase -Benutzers oder NULL, wenn der Benutzer keine Foto -URL hat.
Ansprüche - Object
Hinzugefügt in v0.13.0
Alle maßgefertigten Feuerbasisansprüche.
getIdToken - Function => Promise<String|null>
Eine asynchronisierte Funktion, die sich auf eine gültige Feuerbasis -ID -Token -String oder NULL auflöst, wenn kein gültiges Token verfügbar ist.
ClientInitialized - Boolean
Ob die Firebase JS SDK initialisiert hat. Wenn wir true , verwenden wir keine Benutzerinformationen mehr von serverseitigen Requisiten.
Firebaseuser - FirebaseUser |null
Der Benutzer aus der Firebase JS SDK, falls er initialisiert wurde. Ansonsten null.
Unterschrift - Function => Promise<void>
Eine Methode, die signOut von Firebase nennt, wenn der Firebase JS SDK initialisiert wurde. Wenn das SDK nicht initialisiert wurde, ist diese Methode ein No-op.
String|Function|Object
Das Pageurl wird in appPageURL und authPageURL in den Konfigurations- und Komponenten höherer Ordnung verwendet und definiert eine Umleitungsziel-URL oder einen Pfad.
Es kann eine Zeichenfolge sein: /my-url/here/
Oder ein Objekt:
{
destination : '/my-url/here/' , // Required string: the URL destination of a redirect
basePath : false , // whether to use the Next.js base path.
} Oder eine Funktion, die { ctx, user } empfängt und eine String- oder RedirectObject zurückgibt:
const redirect = ( { ctx , user } ) => {
// any custom logic here
return `/my-url/here/?username= ${ user . displayName } `
} Der ctx ist der nächste.
Siehe Beispiele.md.
Gesteckt? Suchen Sie Diskussionen oder öffnen Sie Ihre eigene Q & A -Diskussion und beschreiben, was Sie bereits ausprobiert haben.
Hier sind einige erste Schritte, die Sie unternehmen können, um Probleme zu debuggen:
onVerifyTokenError und onTokenRefreshError in Ihrer Konfiguration und überprüfen Sie nach Fehlerprotokollen.debug: true in Ihrer Konfiguration und lesen Sie die debug-sieiten-seiten-debug-Protokolle für hilfreiche Nachrichten durch.Wir erwarten, dass bestimmte sensible Konfigurationswerte auf der Clientseite falsy sind (siehe Konfigurationsvalidierungscode). Dies ist eine Vorsichtsmaßnahme, um sicherzustellen, dass Entwickler nicht versehentlich so etwas wie ihren privaten Schlüssel mit dem Kunden JS bündeln.
Um dies zu beheben, stellen Sie sicher, dass die Konfigurationseinstellung auf der Client -Seite undefined ist, indem Sie sie bei Ihrer Browserkonsole angemeldet. Sie können .env Support von Next verwenden, um nur Servervariablen zu setzen. Verwenden Sie niemals das NEXT_PUBLIC* Präfix für geheime Werte.
In diesem Paket wird ein Google -Endpunkt aufgerufen, wenn es eine Token -Server -Seite aktualisieren muss. Sie sehen einen Fehler bei dieser Anfrage.
Bestätigen Sie, dass Ihr firebaseAdminInitConfig.credential.clientEmail korrekt ist. Es sollte die E -Mail sein, die mit Ihrem privaten Taste von FireBase gepaart ist.
Wenn das nicht hilft, inspizieren Sie das benutzerdefinierte Token, um die Werte und die Struktur manuell zu validieren. Einige Leute stoßen auf dieses Problem, wenn ihre Serverzeit falsch ist.
withUserTokenSSR verwenden, aber clientseitige Authäure funktioniert.Wenn Auth auf der Clientseite, jedoch nicht auf der Serverseite, funktioniert, sind die Auth Cookies höchstwahrscheinlich nicht festgelegt.
Um dies zu beheben, bestätigen Sie, dass die Auth -Cookies in den Entwickler -Tools Ihres Browsers eingestellt sind. Wenn sie nicht festgelegt sind, überprüfen Sie bitte, ob die in der next-firebase-auth Konfiguration übergebenen secure , sameSite und path für Ihre Umgebung sinnvoll sind. Wenn Sie beispielsweise auf Non-HTTPS localhost testen, stellen Sie sicher, dass secure ist, dass sie falsch sind.
Außerdem überprüfen Sie Ihre Serverprotokolle für Fehler, um sicherzustellen, dass die Firebase Admin-App ordnungsgemäß initialisiert.
Dies wird häufig durch eine falsche E -Mail in Firebase -Anmeldeinformationen verursacht. Bitte vergewissern Sie sich
Sie können versuchen, Ihre Anmeldeinformationen in der Beispiel -App einzurichten, um sicherzustellen, dass Ihr App -Code kein Problem ist.
Versuchen Sie in der lokalen Entwicklung, Daten/Cookies für localhost zu löschen, falls Sie sich zuvor bei einem anderen Firebase -Konto angemeldet haben und weiterhin von einem anderen privaten Schlüssel unterschrieben werden.
Sie können auch versuchen, den Firebase -Authentifizierungs -Emulator zu deaktivieren. Entfernen Sie firebaseAuthEmulatorHost aus Ihrer Konfiguration und entfernen Sie FIREBASE_AUTH_EMULATOR_HOST aus Ihrer .env -Datei.
Siehe Hinzufügen eines privaten Schlüssels zu Vercel und dieser Diskussion über die Formatierung des privaten Schlüssels.
Wir erwarten, dass einige Apps einige Funktionen benötigen, die derzeit nicht verfügbar sind:
Wir würden gerne Ihr Feedback zu diesen oder anderen Funktionen hören. Bitte zögern Sie nicht, eine Diskussion zu eröffnen!
Wir begrüßen Beiträge! Bitte beachten Sie, dass Dokumente zum Starten beitragen.