繁體中文(台灣)
  • nextjs
  • app-router
  • server-actions
  • sdk

使用 Server Actions 將 Logto 認證添加到你的 Next.js 應用

使用 Server Actions 將 Logto 認證集成到你的 Next.js 應用中。

Sijie
Sijie
Developer

不要在使用者認證上浪費數週時間
使用 Logto 更快地發布安全應用程式。幾分鐘內整合使用者認證,專注於您的核心產品。
立即開始
Product screenshot

Server Actions 提供了一種全新的方式來創建強大的網頁應用,無需傳統的 REST API。此前,我們在我們的文章中已經討論過這一點。

今天,我們很高興地宣佈我們的 Next.js SDK 正式支持這個實驗功能——Server Actions。

欲快速了解,請查看此示例,並跟隨本指南詳細了解如何使用 Server Actions 集成 Logto。

先決條件

開始之前,請確保你有以下條件:

  • 一個運行中的 Logto 實例或對 Logto Cloud 帳戶的訪問權限。
  • 一個已啟用 Server Actions 功能的 Next.js 項目。

配置 Logto

如果你自行託管 Logto,請參考 Logto 的「入門指南」文檔來設置你的 Logto 實例。

如果你使用 Logto Cloud,打開 Logto 控制台,輸入網址 https://cloud.logto.io/ 或你自行託管的端點。

接下來,導航到「應用」標籤,並點擊「創建應用」。

應用標籤

在出現的模態窗口中,選擇「Next.js (App Router)」,並提供一個應用名稱,例如「Next.js App」。然後點擊「創建應用」。

創建應用

你將被引導至 Logto 的教程頁面。點擊「完成」以繼續到應用詳細信息頁面。

應用詳細信息

在「重定向 URI」部分,輸入以下值:

例如,如果你的 Next.js 運行在 http://localhost:3000,那麼值應為:

保存更改

點擊底部的「保存更改」按鈕。一旦成功,保持此頁面打開,它對 Next.js 配置非常有用。

設置 Next.js 應用

確保你有一個最新版本的 Next.js 項目。如果還沒有,可以跟隨官方安裝指南創建一個。

撰寫此指南時,該功能為實驗性,需要在 next.config.js 中啟用

定義 Logto 庫

首先使用 npm 安裝 @logto/next 模塊,如下所示:

你也可以使用 yarnpnpm

接著我們「創建應用」一些作為「服務器操作」的函數,創建新文件 libraries/logto.ts:

在這個文件中,我們導出了四個用於身份驗證的函數。注意第一行 "use server" 表示文件中的代碼只能在服務器端運行。我們使用 "next/headers" 來管理基於 Cookie 的會話。

我們上面導出的函數可以直接從客戶端的 React 組件調用。這是使用 Server Actions 的主要優勢。讓我們進入下一章,瞭解如何使用這些函數。

實現登錄和登出按鈕

實現身份驗證函數之後,讓我們構建頁面。我們將創建兩個客戶端組件以開始登錄和登出操作。

登錄

/app/sign-in.tsx

這裡我們導入了上一章中定義的 signIn 函數。雖然代碼在服務器端執行,但此函數仍可在用戶點擊登錄按鈕時直接由 <button> 組件調用。這樣,我們就不需要編寫任何 REST API 來處理登錄過程。事實上,Next.js 為我們處理了 "POST" 請求分發的細節。在接收到 redirectUrl 後,我們可以調用 router.push 來重定向到 Logto 登錄頁面。

登出

/app/sign-out.tsx

登出過程與登錄過程類似。

準備回調頁面

作為標準 OIDC 身份提供者,Logto 在身份驗證後將用戶重定向到回調 URL。因此,我們必須准備一個回調頁面來處理登錄結果。

/app/callback/page.tsx

這裡我們使用 client 組件和 useEffect,這使得更容易顯示「加載中」頁面以改善用戶體驗。

顯示用戶上下文和保護頁面

現在,讓我們創建一個最小的主頁,展示 Logto SDK 的實用性。如果需要,通過檢查 isAuthenticated 值來保護任何資源免受未知用戶訪問,並重定向到登錄頁面或顯示錯誤信息。

app/page.tsx

如你所見,這是一個服務器組件,省去了使用 useEffect 和管理複雜狀態變更的必要。

結論

Server actions 提供了一種簡化且直接的方式來實現身份驗證,與依賴 REST API 的傳統 Next.js 應用相比更簡單。

完整的代碼樣本可以在這個倉庫中找到:https://github.com/logto-io/js/tree/master/packages/next-server-actions-sample

何不現在試試 Logto Cloud,親身體驗其簡便之處?