Genkit 支援流程層級驗證,因此你可以保護流程,確保只有獲得授權的使用者能執行這些流程。在將流程部署為 HTTP 端點時,這個方法特別實用。
設定流程驗證
如要為流程新增驗證,您可以在定義流程時使用 WithFlowAuth
選項。這個選項會實作 FlowAuth
介面,提供處理驗證和授權的方法。
以下範例說明如何使用驗證功能定義流程:
ctx := context.Background()
// Define an auth policy and create a Firebase auth provider
firebaseAuth, err := firebase.NewAuth(ctx, func(authContext genkit.AuthContext, input any) error {
// The type must match the input type of the flow.
userID := input.(string)
if authContext == nil || authContext["UID"] != userID {
return errors.New("user ID does not match")
}
return nil
}, true)
if err != nil {
log.Fatalf("failed to set up Firebase auth: %v", err)
}
// Define a flow with authentication
authenticatedFlow := genkit.DefineFlow(
"authenticated-flow",
func(ctx context.Context, userID string) (string, error) {
return fmt.Sprintf("Secure data for user %s", userID), nil
},
genkit.WithFlowAuth(firebaseAuth),
)
在這個範例中,我們將使用 Firebase 驗證外掛程式來處理驗證作業。policy
函式會定義授權邏輯,檢查驗證環境中的使用者 ID 是否與輸入的使用者 ID 相符。
使用 Firebase 驗證外掛程式
有了 Firebase 驗證外掛程式,您可以輕鬆將 Firebase 驗證與 Genkit 流程整合。步驟如下:
匯入 Firebase 外掛程式:
import "github.com/firebase/genkit/go/plugins/firebase"
建立 Firebase 驗證供應商:
firebaseAuth, err := firebase.NewAuth(ctx, policy, required)
NewAuth
函式使用三個引數:ctx
:Firebase 初始化的情境。policy
:定義授權邏輯的函式。required
:布林值,表示直接呼叫是否需要驗證。
定義流程時,請使用驗證供應商:
genkit.DefineFlow("secureUserFlow", userDataFunc, genkit.WithFlowAuth(firebaseAuth))
處理 HTTP 要求中的驗證
如果您將流程部署為 HTTP 端點,Firebase 驗證外掛程式就會自動處理傳入要求的驗證作業。它預期可在 HTTP 要求的 Authorization 標頭中取得不記名憑證。
在本機執行已驗證的流程
在本機或其他流程中執行已驗證的流程時,您可以使用 WithLocalAuth
選項提供本機驗證內容:
response, err := authenticatedFlow.Run(ctx, "user123",
genkit.WithLocalAuth(map[string]any{"UID": "user123"}))
這樣一來,您不必提供有效的 Firebase 權杖,即可測試已驗證的流程。