Otentikasi Firebase sederhana untuk semua strategi rendering berikutnya.
Paket ini membuatnya mudah untuk mendapatkan token pengguna dan ID Firebase yang diautentikasi selama rendering sisi-sisi dan server-sisi (SSR).
Kami memperlakukan Firebase JS SDK sebagai sumber kebenaran untuk status auth. Saat pengguna masuk, kami memanggil titik akhir untuk menghasilkan token refresh dan menyimpan info pengguna, token ID, dan menyegarkan token dalam cookie. Permintaan di masa depan ke halaman SSR menerima info pengguna dan token ID dari cookie, menyegarkan token ID sesuai kebutuhan. Saat pengguna keluar, kami tidak mengatur cookie.
Lihat demo langsung dari aplikasi contoh.
Bergantung pada kebutuhan aplikasi Anda, pendekatan lain mungkin bekerja lebih baik untuk Anda.
Jika aplikasi Anda hanya menggunakan halaman statis atau tidak memerlukan pengguna Firebase untuk SSR, gunakan Firebase JS SDK secara langsung untuk memuat pengguna di sisi klien.
getServerSideProps .Jika aplikasi Anda membutuhkan pengguna Firebase untuk SSR (tetapi tidak memerlukan sisi server token ID) , Anda dapat mempertimbangkan salah satu dari pendekatan ini:
Jika aplikasi Anda membutuhkan solusi otentikasi umum - tidak secara khusus otentikasi firebase - Anda dapat mempertimbangkan untuk menggunakan nextAuth.js. NextAuth.js tidak menggunakan otentikasi firebase tetapi mendukung berbagai penyedia identitas, termasuk Google. Baca lebih lanjut di sini tentang perbedaan antara next-firebase-auth dan nextAuth.js untuk melihat mana yang paling cocok untuk kebutuhan Anda.
Jika aplikasi Anda menggunakan router aplikasi berikutnya.js, paket ini belum mendukungnya. Anda dapat mengikuti kemajuan di #568.
Paket ini kemungkinan akan membantu jika Anda berharap menggunakan halaman statis dan SSR atau jika Anda memerlukan akses ke sisi server Token ID Firebase.
Catatan singkat tentang apa yang tidak dilakukan paket ini:
- Itu tidak memberikan otentikasi UI. Pertimbangkan Firebaseui-Web atau bangun sendiri.
- Itu tidak memperluas fungsionalitas firebase di luar menyediakan akses universal kepada pengguna yang tertulis. Gunakan Firebase Admin SDK dan Firebase JS SDK untuk kebutuhan lainnya.
Memasang:
yarn add next-firebase-auth atau npm i next-firebase-auth
Pastikan dependensi sebaya juga diinstal:
yarn add firebase firebase-admin next react react-dom
Buat modul untuk menginisialisasi next-firebase-auth .
Lihat Dokumentasi Konfigurasi untuk detailnya
// ./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 Atur variabel lingkungan pribadi FIREBASE_PRIVATE_KEY , COOKIE_SECRET_CURRENT , dan COOKIE_SECRET_PREVIOUS di .env.local . Jika Anda telah mengaktifkan emulator otentikasi firebase, Anda juga perlu mengatur variabel lingkungan FIREBASE_AUTH_EMULATOR_HOST .
Inisialisasi next-firebase-auth di _app.js :
// ./pages/_app.js
import initAuth from '../initAuth' // the module you created above
initAuth ( )
function MyApp ( { Component , pageProps } ) {
return < Component { ... pageProps } />
}
export default MyAppBuat titik akhir login dan logout API yang mengatur cookie auth:
// ./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 handlerAkhirnya, gunakan pengguna yang diautentikasi di halaman:
// ./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) Menginisialisasi next-firebase-auth , mengambil objek konfigurasi.
withUser({ ...options })(PageComponent) Fungsi tingkat tinggi untuk memberikan konteks User ke komponen. Gunakan ini dengan halaman Next.js apa pun yang akan mengakses pengguna yang ditulis melalui Hook useUser . Secara opsional, ini dapat mengarahkan ulang sisi klien berdasarkan status auth pengguna.
Itu menerima opsi berikut:
| Pilihan | Keterangan | Bawaan |
|---|---|---|
whenAuthed | Tindakan yang harus diambil jika pengguna diautentikasi. Salah satu AuthAction.RENDER atau AuthAction.REDIRECT_TO_APP . | AuthAction.RENDER |
whenAuthedBeforeRedirect | Tindakan yang harus diambil sambil menunggu browser mengarahkan ulang. Relevan ketika pengguna diautentikasi dan ketika diatur ke authaction.redirect_to_app. Salah satu dari: AuthAction.RENDER atau AuthAction.SHOW_LOADER atau AuthAction.RETURN_NULL . | AuthAction.RETURN_NULL |
whenUnauthedBeforeInit | Tindakan yang harus diambil jika pengguna tidak diautentikasi tetapi klien Firebase JS SDK belum diinisialisasi. Salah satu dari: AuthAction.RENDER , AuthAction.REDIRECT_TO_LOGIN , AuthAction.SHOW_LOADER . | AuthAction.RENDER |
whenUnauthedAfterInit | Tindakan yang harus diambil jika pengguna tidak diautentikasi dan klien Firebase JS SDK telah diinisialisasi. Salah satu dari: AuthAction.RENDER , AuthAction.REDIRECT_TO_LOGIN . | AuthAction.RENDER |
appPageURL | URL tujuan pengalihan ketika kita harus mengarahkan kembali ke aplikasi. Sebuah pageurl. | config.appPageURL |
authPageURL | URL tujuan pengalihan ketika kita harus mengalihkan ke halaman login. Sebuah pageurl. | config.authPageURL |
LoaderComponent | Komponen untuk diterjemahkan ketika pengguna tidak terauthed dan whenUnauthedBeforeInit diatur ke AuthAction.SHOW_LOADER . | batal |
Misalnya, halaman ini akan mengarahkan kembali ke halaman login jika pengguna tidak diautentikasi:
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 )Berikut adalah contoh halaman login yang menunjukkan loader sampai firebase diinisialisasi, kemudian mengarahkan kembali ke aplikasi jika pengguna sudah masuk:
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 )Untuk penggunaan naskah, lihat di sini.
withUserTokenSSR({ ...options })(getServerSidePropsFunc = ({ user }) => {}) Fungsi tingkat tinggi yang membungkus fungsi getServerSideProps halaman berikutnya.js untuk menyediakan konteks User selama rendering sisi server. Secara opsional, dapat dialihkan sisi server berdasarkan status auth pengguna. Fungsi yang dibungkus adalah opsional; Jika disediakan, itu akan dipanggil dengan objek context yang berisi properti user .
Itu menerima opsi berikut:
| Pilihan | Keterangan | Bawaan |
|---|---|---|
whenAuthed | Tindakan yang harus diambil jika pengguna diautentikasi. Entah AuthAction.RENDER atau AuthAction.REDIRECT_TO_APP . | AuthAction.RENDER |
whenUnauthed | Tindakan yang harus diambil jika pengguna tidak diautentikasi. Entah AuthAction.RENDER atau AuthAction.REDIRECT_TO_LOGIN . | AuthAction.RENDER |
appPageURL | URL tujuan pengalihan ketika kita harus mengarahkan kembali ke aplikasi. Sebuah pageurl. | config.appPageURL |
authPageURL | URL tujuan pengalihan ketika kita harus mengalihkan ke halaman login. Sebuah pageurl. | config.authPageURL |
Misalnya, halaman ini akan SSR untuk pengguna yang diautentikasi, mengambil alat peraga menggunakan token ID firebase mereka, dan akan mengarahkan kembali sisi server ke halaman login jika pengguna tidak diautentikasi:
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 }) => {}) Berperilaku hampir identik dengan withUserTokenSSR , dengan satu perbedaan utama: user tidak akan berisi token ID.
Metode ini bergantung pada data pengguna yang ditulis dari cookie daripada memverifikasi atau menyegarkan token ID Firebase. Akibatnya:
user yang disediakan melalui konteks akan diselesaikan ke NULL saat Anda menelepon user.getIdToken() .withUserTokenSSR .withUserTokenSSR .cookies.signed Ditilai diatur ke false . Melakukan hal itu adalah risiko keamanan yang potensial, karena nilai cookie pengguna yang tertulis dapat dimodifikasi oleh klien.
Ini membutuhkan opsi yang sama seperti withUserTokenSSR .
useUser() Hook yang mengembalikan user saat ini. Untuk menggunakan ini, halaman Next.js harus dibungkus withUser . Jika pengguna tidak diautentikasi, useUser akan mengembalikan instance User dengan id nol.
Misalnya:
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)Mengatur cookie untuk menyimpan info pengguna yang diautentikasi. Panggil ini dari titik akhir API "login" Anda.
Cookie dikelola dengan cookies . Lihat opsi Config for Cookie.
Argumen req harus menjadi objek permintaan IncomingMessage / selanjutnya.js. Argumen res harus berupa objek respons ServerResponse / Next.js. Ini mensyaratkan bahwa header permintaan Authorization diatur ke token ID pengguna Firebase, yang ditangani paket ini secara otomatis.
Ini hanya dapat dipanggil di sisi server.
unsetAuthCookies(req, res)UNSET (Kedaluwarsa) Cookie AUTH. Hubungi ini dari titik akhir API "logout" Anda.
Argumen req harus menjadi objek permintaan IncomingMessage / selanjutnya.js. Argumen res harus berupa objek respons ServerResponse / Next.js.
Ini hanya dapat dipanggil di sisi server.
verifyIdToken(token) => Promise<User> Memverifikasi token ID firebase dan diselesaikan ke instance User . Ini melayani tujuan yang sama seperti Firebase Admin Admin SDK's VerifyIdToken.
getUserFromCookies({ ...options })Ditambahkan dalam v1
Memverifikasi dan mengembalikan user dari cookie auth. Ini adalah alternatif untuk verifyIdToken , yang memverifikasi pengguna dari token ID.
Secara umum, kami merekomendasikan agar titik akhir API menggunakan token ID daripada cookie untuk mengidentifikasi pengguna, yang menghindari beberapa kerentanan CSRF yang potensial. Namun, metode ini akan bermanfaat untuk titik akhir harus mengandalkan secara eksklusif pada nilai cookie untuk mengidentifikasi pengguna.
Ini hanya dapat dipanggil di sisi server.
Lihat contoh ini untuk informasi lebih lanjut tentang menggunakan ini di lingkungan backend mandiri di luar Next.js.
Argumen opsi dapat mencakup:
Object - objek permintaan IncomingMessage
Objek permintaan yang nilai cookie header akan digunakan untuk memverifikasi pengguna. Nilai req atau authCookieValue diperlukan.
Boolean
Apakah pengguna yang dikembalikan atau tidak harus menyertakan token ID Firebase. Default ke true. Ketika benar, perilaku mengikuti dengan withUserTokenSSR ; Saat salah, itu mengikuti withUserSSR . Baca lebih lanjut tentang perbedaan dalam dokumen untuk WithUserssr.
String
Sebagai alternatif untuk menyediakan objek req , Anda dapat secara langsung memberikan nilai cookie auth untuk digunakan. Misalnya, jika cookie auth Anda bernama MyAuth , Anda akan memberikan nilai cookie MyAuth.AuthUser (jika includeToken yang salah) atau MyAuth.AuthUserTokens (jika includeToken adalah benar).
Nilai req atau authCookieValue diperlukan.
String
Nilai tanda tangan cookie auth, jika menggunakan cookie yang ditandatangani. Misalnya, jika cookie auth Anda bernama MyAuth , Anda akan memberikan nilai cookie MyAuth.AuthUser.sig (jika includeToken orang yang salah) atau MyAuth.AuthUserTokens.sig (jika includeToken adalah benar).
AuthAction Objek yang mendefinisikan opsi rendering/pengalihan untuk withUser dan withUserTokenSSR . Lihat otot.
Lihat contoh konfigurasi di sini. Berikan konfigurasi saat Anda menelepon init .
String|Function|Object - A PageUrl
URL default untuk menavigasi kapan withUser atau withUserTokenSSR perlu mengarahkan kembali ke login. Opsional kecuali menggunakan tindakan auth AuthAction.REDIRECT_TO_LOGIN .
String|Function|Object - A PageUrl
URL default untuk menavigasi kapan withUser atau withUserTokenSSR perlu mengarahkan ulang ke aplikasi. Opsional kecuali menggunakan tindakan auth AuthAction.REDIRECT_TO_APP .
String
Titik Akhir API Modul ini akan menelepon ketika keadaan auth berubah untuk pengguna firebase yang diautentikasi.
String
Titik Akhir API Modul ini akan menelepon ketika keadaan auth berubah untuk pengguna Firebase yang tidak aautentikasi.
Function (opsional)
Handler menelepon jika titik akhir API login mengembalikan respons non-200. Jika pawang tidak ditentukan, perpustakaan ini akan melakukan respons non-24.
Tidak digunakan atau diizinkan jika tokenChangedHandler khusus ditetapkan.
Function (opsional)
Handler menelepon jika titik akhir API logout mengembalikan respons non-200. Jika pawang tidak ditentukan, perpustakaan ini akan melakukan respons non-24.
Tidak digunakan atau diizinkan jika tokenChangedHandler khusus ditetapkan.
Function
Panggilan balik yang berjalan ketika keadaan auth berubah untuk pengguna tertentu. Gunakan ini jika Anda ingin menyesuaikan bagaimana aplikasi sisi klien Anda memanggil titik akhir login/logout API Anda (misalnya, untuk menggunakan fetcher khusus atau menambahkan header khusus). tokenChangedHandler menerima User sebagai argumen dan dipanggil ketika token ID pengguna berubah, mirip dengan acara onIdTokenChanged Firebase.
Jika panggilan balik ini ditentukan, pengguna bertanggung jawab atas:
Lihat panduan default untuk panduan.
String
Host dan port untuk Emulator Auth Firebase Lokal. Jika nilai ini ditetapkan, emulator auth akan diinisialisasi dengan host dan port yang disediakan.
Harus mencocokkan nilai variabel lingkungan FIREBASE_AUTH_EMULATOR_HOST , misalnya, localhost:9099 .
Object
Konfigurasi diteruskan ke initializeApp firebase-admin . Ini harus berisi properti credential (objek biasa) dan properti databaseURL . Diperlukan kecuali Anda menginisialisasi sendiri firebase-admin sebelum menginisialisasi next-firebase-auth .
firebaseAdminInitConfig.credential.privateKey tidak dapat didefinisikan di sisi klien dan harus hidup dalam variabel lingkungan rahasia.
Menggunakan Vercel? Lihat Menambahkan Kunci Pribadi ke Vercel untuk Bimbingan.
Boolean
Ketika benar, firebase-admin akan secara implisit menemukan akun layanan lingkungan hosting Anda selama initializeApp . Ini berlaku untuk Firebase, dan Google Cloud Platform, dan direkomendasikan lebih dari menambahkan kunci akun layanan ke kode melalui jalur file atau nilai langsung.
Catatan : Untuk mengatur firebase-admin , baik firebaseAdminInitConfig atau useFirebaseAdminDefaultCredential harus disediakan. Menggunakan kredensial default akan mengesampingkan nilai -nilai yang diteruskan ke firebaseAdminInitConfig.credential jika keduanya disajikan.
Object
Pencocokan Konfigurasi Firebase JS SDK's initializeApp . Nilai firebaseClientInitConfig.apiKey selalu diperlukan . Kami merekomendasikan untuk menginisialisasi sendiri klien firebase SDK sebelum menginisialisasi next-firebase-auth ; Namun, next-firebase-auth akan mencoba untuk menginisialisasi Firebase jika aplikasi Firebase belum ada.
Object
Pengaturan yang digunakan untuk cookie auth. Kami menggunakan cookies untuk mengelola cookie.
Properti meliputi:
name : Digunakan sebagai basis untuk nama cookie: Jika name diatur ke "MyExample", cookie akan dinamai MyExample.AuthUser dan MyExample.AuthUserTokens (ditambah MyExample.AuthUser.sig dan MyExample.AuthUserTokens.sig jika cookie ditandatangani). Diperlukan.keys : Sejumlah string yang akan digunakan untuk menandatangani cookie; Misalnya, ['xD$WVv3qrP3ywY', '2x6#msoUeNhVHr'] . Karena string ini adalah rahasia, menyediakannya melalui variabel lingkungan rahasia, seperti [ process.env.COOKIE_SECRET_CURRENT, process.env.COOKIE_SECRET_PREVIOUS ] . Array keys diteruskan ke KeyGrip Constructor seperti yang dijelaskan dalam paket cookies . Diperlukan kecuali signed diatur ke false .cookies.set . Nilai keys tidak dapat didefinisikan di sisi klien dan harus hidup dalam variabel lingkungan rahasia.
Untuk keamanan, nilai maxAge harus dua minggu atau kurang. Perhatikan bahwa maxAge didefinisikan dalam milidetik.
Catatan: Kadalan cookie akan diperpanjang secara otomatis ketika pengguna memuat Firebase JS SDK.
Firebase JS SDK adalah sumber kebenaran untuk otentikasi, jadi jika cookie kedaluwarsa tetapi pengguna masih dimasukkan dengan firebase, cookie akan secara otomatis ditetapkan lagi ketika pengguna memuat Firebase JS SDK - tetapi pengguna tidak akan dimasukkan selama SSR pada permintaan pertama tersebut.
Function (opsional)
Penangan kesalahan yang akan dipanggil jika ada kesalahan yang tidak terduga saat memverifikasi sisi server token ID pengguna. Itu akan menerima kesalahan auth firebase.
Perpustakaan ini tidak akan melempar ketika tidak dapat memverifikasi token ID. Sebagai gantinya, itu akan memberikan pengguna yang tidak otentikasi ke aplikasi. Ini biasanya akan menangani kesalahan terkait auth yang umum seperti auth/id-token-expired dan auth/user-disabled tanpa melempar. Lihat #366 dan #174 untuk latar belakang tambahan.
Function (opsional)
Penangan kesalahan yang akan dipanggil jika ada kesalahan yang tidak terduga sambil menyegarkan sisi server token ID pengguna.
Perpustakaan ini tidak akan melempar ketika tidak dapat menyegarkan token ID. Sebagai gantinya, itu akan memberikan pengguna yang tidak otentikasi ke aplikasi. Lihat #366 dan #174 untuk latar belakang tambahan.
Mendefinisikan tindakan yang harus diambil tergantung pada status auth pengguna, menggunakan konstanta berikut:
AuthAction.RENDER : Render komponen anak
AuthAction.SHOW_LOADER : Tampilkan komponen loader
AuthAction.RETURN_NULL : kembalikan nol, bukan komponen apa pun
AuthAction.REDIRECT_TO_LOGIN : Redirect ke halaman login
AuthAction.REDIRECT_TO_APP : Redirect ke aplikasi
Objek pengguna digunakan di seluruh konteks sisi server dan sisi klien. Ini adalah representasi yang dinormalisasi dari pengguna firebase.
ID - String|null
ID pengguna Firebase, atau nol jika pengguna tidak diautentikasi.
Email - String|null
Alamat email pengguna Firebase, atau nol jika pengguna tidak memiliki alamat email.
Emailverified - Boolean
Apakah alamat email pengguna diverifikasi.
Phonenumber - String|null
Ditambahkan dalam v0.13.1
Nomor telepon pengguna Firebase, atau nol jika pengguna tidak memiliki nomor telepon.
DisplayName - String|null
Ditambahkan dalam v0.13.1
Nama tampilan pengguna Firebase, atau nol jika pengguna tidak memiliki nama tampilan.
Photourl - String|null
Ditambahkan dalam v0.13.1
URL Foto Pengguna Firebase, atau NULL jika pengguna tidak memiliki URL foto.
Klaim - Object
Ditambahkan dalam v0.13.0
Setiap klaim firebase khusus.
getIdtoken - Function => Promise<String|null>
Fungsi async yang diselesaikan menjadi string token ID Firebase yang valid, atau nol jika tidak ada token yang valid tersedia.
ClientInitialized - Boolean
Apakah Firebase JS SDK telah diinisialisasi. Jika true , kami tidak lagi menggunakan info pengguna dari alat peraga sisi server.
FirebaseUser - FirebaseUser |null
Pengguna dari Firebase JS SDK, jika telah diinisialisasi. Jika tidak, nol.
Signout - Function => Promise<void>
Metode yang memanggil signOut Firebase jika Firebase JS SDK telah diinisialisasi. Jika SDK belum diinisialisasi, metode ini adalah no-op.
String|Function|Object
Digunakan di appPageURL dan authPageURL dalam komponen konfigurasi dan tingkat tinggi, PageUrl mendefinisikan URL atau jalur tujuan pengalihan.
Itu bisa berupa string: /my-url/here/
Atau objek:
{
destination : '/my-url/here/' , // Required string: the URL destination of a redirect
basePath : false , // whether to use the Next.js base path.
} Atau fungsi yang menerima { ctx, user } dan mengembalikan string atau redirectObject:
const redirect = ( { ctx , user } ) => {
// any custom logic here
return `/my-url/here/?username= ${ user . displayName } `
} ctx adalah nilai konteks selanjutnya.js jika sisi server, atau tidak terdefinisi jika sisi klien.
Lihat contoh.md.
Terjebak? Cari diskusi atau buka diskusi tanya jawab Anda sendiri yang menggambarkan apa yang sudah Anda coba.
Berikut adalah beberapa langkah awal yang dapat Anda ambil untuk debug masalah:
onVerifyTokenError dan onTokenRefreshError di konfigurasi Anda dan periksa log kesalahan apa pun.debug: true di konfigurasi Anda dan baca melalui log debug sisi server dan sisi klien untuk setiap pesan yang bermanfaat.Kami berharap nilai konfigurasi sensitif tertentu menjadi beralih di sisi klien (lihat kode validasi konfigurasi). Ini adalah tindakan pencegahan untuk memastikan pengembang tidak secara tidak sengaja menggabungkan sesuatu seperti kunci pribadi firebase mereka dengan klien JS.
Untuk memperbaikinya, pastikan pengaturan konfigurasi undefined di sisi klien dengan mencatatnya ke konsol browser Anda. Anda dapat menggunakan dukungan .env berikutnya untuk mengatur variabel server saja. Jangan pernah menggunakan awalan NEXT_PUBLIC* untuk nilai rahasia apa pun.
Paket ini akan menghubungi titik akhir Google ketika perlu menyegarkan sisi server token. Anda melihat kesalahan dari permintaan itu.
Untuk memperbaikinya, konfirmasikan bahwa firebaseAdminInitConfig.credential.clientEmail Anda sudah benar. Seharusnya email yang dipasangkan dengan kunci pribadi Firebase Anda.
Jika itu tidak membantu, cobalah memeriksa token khusus untuk memvalidasi nilai dan struktur secara manual. Beberapa orang mengalami masalah ini ketika waktu server mereka salah.
withUserTokenSSR , tetapi auth sisi klien berfungsi.Jika auth bekerja di sisi klien tetapi tidak di sisi server, cookie auth kemungkinan besar tidak diatur.
Untuk memperbaikinya, konfirmasi cookie auth diatur dalam alat dev browser Anda. Jika tidak diatur, silakan periksa bahwa opsi secure , sameSite , dan path yang disahkan di konfigurasi next-firebase-auth masuk akal untuk lingkungan Anda. Misalnya, jika Anda menguji non-HTTPS localhost, pastikan secure itu salah.
Selain itu, silakan periksa kembali log server Anda untuk kesalahan apa pun untuk memastikan aplikasi Admin Firebase sedang menginisialisasi dengan benar.
Seringkali, ini disebabkan oleh email yang salah dalam kredensial Firebase. Harap verifikasi bahwa email tersebut benar dan dari akun Firebase yang sama dengan kunci pribadi Anda, atau coba menghasilkan kunci baru: https://firebase.google.com/docs/admin/setup
Anda dapat mencoba mengatur kredensial Anda di aplikasi contoh untuk memastikan kode aplikasi Anda bukan masalah.
Dalam pengembangan lokal, cobalah membersihkan data/cookie untuk localhost jika Anda sebelumnya masuk dengan akun firebase lain dan masih memiliki cookie auth yang ditandatangani oleh kunci pribadi lain.
Anda juga dapat mencoba menonaktifkan emulator otentikasi firebase. Hapus firebaseAuthEmulatorHost dari konfigurasi Anda dan hapus FIREBASE_AUTH_EMULATOR_HOST dari file .env Anda.
Lihat Menambahkan Kunci Pribadi ke Vercel dan diskusi ini tentang pemformatan kunci pribadi.
Kami berharap beberapa aplikasi akan membutuhkan beberapa fitur yang saat ini tidak tersedia:
Kami ingin mendengar umpan balik Anda tentang ini atau fitur lainnya. Silakan membuka diskusi!
Kami menyambut kontribusi! Silakan lihat dokumen yang berkontribusi untuk memulai.