مصادقة التدفق

تتوافق 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 منطق التفويض، وتتحقّق مما إذا كان رقم تعريف المستخدم في سياق المصادقة يتطابق مع رقم تعريف المستخدم الذي تم إدخاله.

استخدام المكوّن الإضافي لمصادقة Firebase

يوفّر المكوّن الإضافي لمصادقة Firebase طريقة سهلة لدمج مصادقة Firebase مع مسارات Genkit. إليك كيفية استخدامه:

  1. استيراد مكوّن Firebase الإضافي:

    import "github.com/firebase/genkit/go/plugins/firebase"
    
  2. أنشئ موفِّر مصادقة Firebase:

    firebaseAuth, err := firebase.NewAuth(ctx, policy, required)
    

    تستخدم الدالة NewAuth ثلاث وسيطات:

    • ctx: سياق إعداد Firebase
    • policy: دالة تحدد منطق التفويض.
    • required: قيمة منطقية تشير إلى ما إذا كانت المصادقة مطلوبة للمكالمات المباشرة.
  3. استخدِم موفِّر المصادقة عند تحديد المسار:

    genkit.DefineFlow("secureUserFlow", userDataFunc, genkit.WithFlowAuth(firebaseAuth))
    

معالجة المصادقة في طلبات HTTP

عند نشر التدفق كنقطة نهاية HTTP، سيتعامل المكوّن الإضافي للمصادقة في Firebase مع المصادقة على الطلبات الواردة تلقائيًا. وهي تتوقع ظهور رمز حامل مميز في عنوان التفويض في طلب HTTP.

تشغيل مسارات تمت مصادقتها محليًا

عند تشغيل التدفقات التي تمت مصادقتها محليًا أو من داخل مسارات أخرى، يمكنك توفير سياق مصادقة محلي باستخدام الخيار WithLocalAuth:

response, err := authenticatedFlow.Run(ctx, "user123",
	genkit.WithLocalAuth(map[string]any{"UID": "user123"}))

يتيح لك ذلك اختبار المسارات التي تمت مصادقتها بدون الحاجة إلى توفير رمز Firebase مميّز صالح.