Mange som jobber med Next.js kjenner kanskje til autentiseringsløsningen NextAuth.js. Biblioteket har mer enn 300.000 ukentlige nedlastinger, og konkurrerer med lignende løsninger fra blant andre Okta/Auth0.
Kort fortalt gjør biblioteket det enklere å legge til sikker og brukervennlig innlogging på nettsider og web-apper laget med Next.js.
Autentiseringsbiblioteket vedlikeholdes av Balázs Orbán, som jobber som utvikler i Vercel fra sitt hjemmekontor i Oslo.
Balázs fikk drømmejobben i Vercel gjennom open source: – Jeg ble helt skjelven
Rett før jul annonserte Balázs at NextAuth.js nå blir til Auth.js, der den store nyheten er at biblioteket blir fullstendig rammeverk/runtime-agnostisk – det vil si skal fungere enten du bruker Next.js eller noe helt annet.
– Vi jobbet natt og dag for å få Auth.js for Svelte klart til lanseringen av SvelteKit 1.0 den 14. desember, og vi klarte det! forteller Balázs til kode24.
Åpen løsning som kan utvides
– Det finnes massevis av løsninger for autentisering, hva er det som er så spesielt med Auth.js? Hvorfor skal man bruke det?
– Folk elsker API-et. Det er veldig enkelt å sette opp. Du har én fil for å konfigurere alt, og trenger du noe enkelt er det kanskje 10 linjer med kode, sier Balázs.
Det er lagt vekt på at Auth.js skal være en åpen løsning som enkelt kan utvides, og der du kan koble til de tjenestene du har. For eksempel er det støtte for over 60 ulike providers, som er tjenester du kan logge inn med. Det kan for eksempel være å logge inn via Facebook, Github, Apple, eller annet.
– Så lenge provideren støtter OAuth eller OpenID, vil det fungere. Vi velger å følge dette veldig strengt, og pushe økosystemet til å følge specs. Mange biblioteker sier de følger OAuth-spesifikasjonene, men gjør likevel unntak for noen providere.
Slutta i jobben for å lage eget CMS: - Fantes ingen rammeverk som tok seg av alle behovene våre
Adaptere for databaser
Balázs kan opplyse om at støtte for innlogging via både BankID og Vipps er underveis.
I tillegg til providers, støtter Auth.js det som kalles adapters. Disse gjør det mulig å koble applikasjonen du lager til rundt 10 ulike populære databaser. På den måten kan du lagre informasjon om brukere, konto, sesjonsdata og annet i for eksempel Firebase, Supabase, MongoDB eller andre databaser.
Og finnes det ikke en ferdig adapter, skal det være lett å definere sin egen.
– Auth.js kan brukes med en hvilken som helst database. Eller uten en database hvis du har enkle behov. Som standard lagres en sesjon som en JWT i en cookie, sier Balázs.
Basert på web-standarder
Det med å følge standarder strengt har vært avgjørende for arbeidet med å gjøre Auth.js (og tidligere NextAuth.js) til noe som skal fungere på tvers av ulike rammeverk og kjøremiljøer.
Balázs forteller at Auth.js har to deler:
- "Kjernen" er backendløsningen som håndterer autentiseringen, med hemmelige tokens og så videre.
- Klienten som håndterer sesjoner, innlogging og utlogging
Det er kun klienten som er særlig forskjellig mellom ulike rammeverk, og det er også der Balázs er mest avhengig av hjelp fra andre med dybdekunnskap om de enkelte rammeverkene. Backenden er "grunnmuren" alle de ulike klientene er basert på.
«Mange er kun for Node.js, vår løsning fungerer like bra på Deno, Bun eller andre.»
Ikke klart for produksjon
Det vanskeligste i prosjektet har vært å sørge for at kjernen er agnostisk med hensyn til rammeverk. Derfor må alt være basert på web-standarder.
– Jeg mener det at Auth.js baserer seg veldig strengt på standard web-standarder og API-er er et pluss. Mange andre er kun for Node.js, vår løsning fungerer like bra på Deno, Bun eller andre, sier Balázs.
Når det gjelder frontendrammeverk, har det per dags dato kommet støtte for SvelteKit og SolidStart (et rammeverk bygget på toppen av Solid.js). I tillegg til Next.js, selvfølgelig. Det er planer for en rekke andre også, som Gatsby, Qwik og Astro.
Balázs Orbán understreker at Auth.js fortsatt er å regne som et eksperimentelt bibliotek, i motsetning til NextAuth.
– Det er ennå ikke klart for å brukes i produksjon. Men jeg håper mange vil prøve det ut, avslutter han.