• nextjs
  • app-router
  • server-actions
  • sdk

Dodaj uwierzytelnianie Logto do swojej aplikacji Next.js używając Server Actions

Integruje uwierzytelnianie Logto z Twoją aplikacją Next.js używając Server Actions.

Sijie
Sijie
Developer

Server Actions to odświeżone podejście do tworzenia solidnych aplikacji webowych bez potrzeby stosowania tradycyjnych API typu REST. Omówiliśmy to już wcześniej w naszym artykule.

Dzisiaj z radością ogłaszamy oficjalne wsparcie dla Server Actions w naszym SDK Next.js, pomimo że jest to funkcja eksperymentalna.

Aby zapoznać się z krótkim przeglądem, sprawdź ten przykład i podążaj za nami, jak szczegółowo integrujemy Logto z Server Actions w tym przewodniku.

Wymagania wstępne

Aby rozpocząć, upewnij się, że masz następujące elementy:

  • Działająca instancja Logto lub dostęp do konta Logto Cloud.
  • Projekt Next.js z włączoną funkcją Server Actions.

Skonfiguruj Logto

Jeśli hostujesz Logto samodzielnie, zapoznaj się z dokumentacją Logto "Get started" w celu skonfigurowania swojej instancji Logto.

Otwórz Konsolę Logto, wprowadzając adres URL https://cloud.logto.io/ jeśli używasz Logto Cloud, lub punkt końcowy, który skonfigurowałeś do samodzielnego hostowania.

Następnie przejdź do zakładki "Applications" i kliknij "Create application".

Zakładka Applications

W wyświetlonym oknie dialogowym wybierz "Next.js (App Router)" i podaj nazwę aplikacji, na przykład "Next.js App". Następnie kliknij "Create application”.

Utwórz aplikację

Zostaniesz przekierowany na stronę z instrukcją w Logto. Kliknij "Finish and done", aby przejść do strony szczegółów aplikacji.

Szczegóły aplikacji

W sekcji "Redirect URIs" wprowadź następującą wartość:

Na przykład, jeśli hostujesz Next.js pod adresem http://localhost:3000, wartość powinna być:

Zapisz zmiany

Kliknij przycisk "Save Changes" na dole. Gdy się powiedzie, pozostaw tę stronę otwartą, ponieważ będzie przydatna do konfiguracji Next.js.

Skonfiguruj aplikację Next.js

Upewnij się, że masz projekt z najnowszą wersją Next.js. Jeśli jeszcze takowego nie masz, możesz postępować zgodnie z oficjalnym przewodnikiem instalacji, aby go utworzyć.

W momencie pisania tego przewodnika, funkcja jest eksperymentalna i wymaga aktywacji w next.config.js

Zdefiniuj bibliotekę Logto

Zacznij od zainstalowania modułu @logto/next za pomocą npm w następujący sposób:

Możesz także użyć yarn lub pnpm.

Następnie utwórzmy kilka funkcji jako "server actions”, utwórz nowy plik libraries/logto.ts:

W tym pliku eksportujemy cztery funkcje do celów uwierzytelniania. Zwróć uwagę na pierwszą linię, "use server" wskazuje, że kod w pliku może działać tylko po stronie serwera. Używamy "next/headers" do zarządzania sesjami opartymi na ciasteczkach.

Powyższe funkcje, które eksportowaliśmy, mogą być wywoływane bezpośrednio z komponentu React po stronie klienta. To główna zaleta używania Server Actions. Przejdźmy do następnego rozdziału, aby zobaczyć, jak używać tych funkcji.

Implementacja przycisków do logowania i wylogowywania

Mając już funkcje uwierzytelniające, skonstruujmy stronę. Stworzymy dwa komponenty klienta, aby zainicjować akcje logowania i wylogowywania.

Logowanie

/app/sign-in.tsx:

Tutaj importujemy funkcję signIn, którą właśnie zdefiniowaliśmy w poprzednim rozdziale. Chociaż kod jest wykonywany po stronie serwera, tę funkcję można nadal bezpośrednio wywołać przez komponent <button> podczas klikania przycisku logowania przez użytkownika. Dzięki temu eliminujemy potrzebę pisania jakiegokolwiek API REST do obsługi procesu logowania. W rzeczywistości, Next.js obsługuje szczegóły dyspozytora żądania "POST" za nas. Po otrzymaniu redirectUrl, możemy wywołać router.push, aby przejść do strony logowania Logto.

Wylogowywanie

/app/sign-out.tsx:

Proces wylogowywania jest podobny do procesu logowania.

Przygotowanie strony callback

Jako standardowy dostawca tożsamości OIDC, Logto przekierowuje użytkowników do adresu URL callback po uwierzytelnieniu. Dlatego musimy przygotować stronę callback, aby obsłużyć wynik logowania.

/app/callback/page.tsx

Tutaj używamy komponentu klienta z useEffect, co ułatwia wyświetlanie strony "loading" dla lepszego doświadczenia użytkownika.

Wyświetlanie kontekstu użytkownika i zabezpieczenie strony

Teraz stwórzmy minimalną stronę główną, aby pokazać użyteczność SDK Logto. Jeśli to konieczne, zabezpiecz jakiekolwiek zasoby przed nieznanymi użytkownikami, sprawdzając wartość isAuthenticated i przekierowując na stronę logowania lub wyświetlając komunikaty o błędzie.

app/page.tsx

Jak możesz zauważyć, jest to komponent serwera, który eliminuje potrzebę używania useEffect i zarządzania skomplikowanymi zmianami stanu.

Wniosek

Server actions oferują usprawniony i prosty sposób implementacji uwierzytelniania w porównaniu do tradycyjnych aplikacji Next.js, które polegają na API typu REST.

Cały przykładowy kod można znaleźć w tym repozytorium: https://github.com/logto-io/js/tree/master/packages/next-server-actions-sample

Dlaczego nie spróbować Logto Cloud i doświadczyć łatwości w działaniu?