繁體中文(台灣)
  • flutter
  • 認證
  • flutter-flow

自訂 FlutterFlow 驗證使用 Logto

學習如何在你的 Flutter 應用程式中使用 Logto Flutter SDK 實現自訂驗證。

Simeng
Simeng
Developer

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

介紹

FlutterFlow 是一個低代碼平台,讓你可以視覺化地建立 Flutter 應用程式。它提供拖放界面來設計你的應用程式 UI 並生成相應的 Flutter 代碼。根據官方文檔,它提供三種不同的驗證整合選項:

  1. 通過內建的 Firebase 驗證
  2. 通過內建的 Supabase 驗證
  3. 自訂驗證

對於前兩種,FlutterFlow 提供與 Firebase 和 Supabase 的無縫整合。你需要設置你的 Firebase 或 Supabase 專案並在 FlutterFlow 中配置驗證設置。不過,如果你想使用不同的驗證提供者,你需要自己實現驗證邏輯。

至於自訂驗證,FlutterFlow 提供了一種整合任何驗證提供者的方法,依賴於單一自訂的驗證 API

然而,直接在客戶端與驗證伺服器之間交換用戶憑據不符合現代安全標準。相反,你應當使用如 OAuth 2.0 或 OpenID Connect (OIDC) 這類安全的驗證流來驗證用戶。對於現代 OAuth 2.0 或 OIDC 基礎的身份提供者 (IdP),如 Auth0、Okta 和 Logto,資源所有者密碼憑據 (ROPC) 授權類型不推薦或因安全原因被禁止。詳情參見已廢棄的 ropc 授權類型

一個標準的 OAuth 2.0 或 OIDC 驗證流涉及客戶端應用程式、授權伺服器和用戶瀏覽器之間的多步和重定向。在這篇文章中,我們將展示如何客製化 FlutterFlow 的 CustomAuthManager 類,使用 Logto Flutter SDK 在你的 FlutterFlow 應用程式中實現一個安全的驗證流。

先決條件

  • 一個 Logto Cloud 帳戶或自託管的 Logto 實例。(查看 ⚡ Get started 指南來建立一個 Logto 實例)
  • 使用 FlutterFlow 創建的 Flutter 應用程式。
  • 在你的 Logto 控制台中註冊一個 Flutter 應用程式。
  • 一個 GitHub 儲存庫來管理你的 FlutterFlow 自訂代碼。
  • 查看我們的 Flutter SDK 整合指南

步驟 1:在 FlutterFlow 中啟用管理自訂代碼

為了客製化 CustomAuthManager 類,你需要在 FlutterFlow 中啟用自訂代碼功能。請參考在 GitHub 上管理自訂代碼指南來連結並同步你的 FlutterFlow 專案與 GitHub。

完成後,你將在你的 GitHub FlutterFlow 儲存庫下擁有三個不同的分支:

  1. main: Flutter 專案的主要分支。你需要這個分支來部署你的專案。
  2. flutterflow: FlutterFlow 將會從 UI 編輯器將變更同步到你的代碼庫的分支。
  3. develop: 你可以修改你的自訂代碼的分支。

步驟 2:在 FlutterFlow 中設計及建立你的自訂 UI 流程

建立你的頁面

在 FlutterFlow 中創建你的 UI。你可以參考 FlutterFlow 文檔 來根據你的需求創建 UI。在本教程中,作為最低要求,我們假設你有兩個頁面:

  1. 一個簡單的 HomePage,有一個登錄按鈕。(不需要登錄表單,用戶驗證流程在 Logto 端處理。請查看自訂 sie 指南以獲取更多詳情。)

home page

  1. 一個 user 資料頁面,用於顯示用戶信息和登出按鈕。

user page

在 FlutterFlow 中啟用自訂驗證

前往 App Settings - Authentication 頁面並啟用自訂驗證。這將在你的 FlutterFlow 項目中創建一個 CustomAuthManager 類和相關文件。

FlutterFlow 自訂認證

步驟 3:將你的 FlutterFlow 專案與 GitHub 同步

在 FlutterFlow 中創建自定義 UI 並啟用自訂驗證後,你需要將專案與 GitHub 同步。前往 integrations - GitHub 頁面,然後點擊 Push to Repository

FlutterFlow GitHub push

步驟 4:自訂 CustomAuthManager 代碼

切換到你的 GitHub 儲存庫中的 develop 分支,並合併來自 flutterflow 分支的最新變更。這將同步所有 UI 更改到你的 develop 分支,包括你的頁面小部件,以及預生成的 CustomAuthManager 類。

安裝 Logto SDK 依賴項

在專案中添加 Logto SDK 依賴項。

更新 UserProvider 類

UserProvider 類負責管理用戶驗證狀態。我們需要自訂屬性來存儲 Logto SDK 提供的用戶驗證信息。

添加一個類型為 OpenIdClaimsidToken 屬性來存儲經驗證用戶的 id_token 聲明。

OpenIdClaims 類定義在 Logto SDK 中,提供來自經驗證用戶的 OIDC 標準 id_token 聲明。

自訂 CustomAuthManager 類並初始化 Logto 客戶端

initialize 方法將初始化一個 Logto 客戶端實例,並使用保存在本地存儲中的用戶驗證狀態更新當前用戶流。

Logto SDK 使用 flutter_secure_storage 套件來安全地存儲用戶驗證數據。一旦用戶驗證成功,id_token 聲明將存儲在本地存儲中。

使用 Logto 客戶端實現登錄方法

調用 LogtoClient.signIn 方法將啟動標準的 OIDC 驗證流。Logto 登錄頁面將在 webview 中打開。基於 webview 的驗證流由 flutter_web_auth 提供支持。

LogtoClient 將處理授權、令牌交換和用戶信息檢索步驟。一旦用戶驗證成功,idTokenClaims 將存儲在本地存儲中。

從 LogtoClient 檢索 idTokenClaims 並更新當前用戶流。

實現登出方法

signOut 方法將清除存儲在本地存儲中的用戶驗證數據並更新當前用戶流。

更新驗證工具方法

  • 添加 authManager getter 來訪問 CustomAuthManager 實例。
  • 添加 currentUserUid getter 來獲取當前用戶的 uid。
  • 添加 currentUserData getter 來獲取當前用戶數據。
  • 添加 logtoClient getter 來訪問 Logto 客戶端實例。

步驟 5:更新 UI 中的登錄和登出按鈕

主頁

當用戶點擊登錄按鈕時,調用 authManager.signIn 方法來啟動驗證流程。

redirectUri 是用來捕獲 Logto 登錄頁面授權回調的回調 URL。詳細信息請參見實現登錄

用戶驗證成功後,將被重定向到 user 頁面。

用戶資料頁面

使用驗證工具 getter 來訪問當前用戶數據和 Logto 客戶端實例。

例如,使用多個 Text 小部件來顯示用戶信息:

當用戶點擊登出按鈕時觸發登出方法,並將用戶重定向回主頁。

測試

在模擬器上運行你的 FlutterFlow 應用程式。點擊主頁上的登錄按鈕來啟動驗證流程。Logto 登錄頁面將在 webview 中打開。驗證成功後,用戶將被重定向到用戶資料頁面。用戶信息將顯示在用戶資料頁面上。點擊登出按鈕用戶將被簽出,並被重定向回主頁。

不要忘記將 develop 分支合併回 main 分支並將變更推送到 GitHub 儲存庫。

進一步閱讀

Logto SDK 提供了更多與 Logto API 交互的方法。你可以進一步自訂 CustomAuthManager 類來使用 Logto SDK 實現更多功能。