لتقارير الأخطاء:
cognito-user-pool.yml
Resources:
CognitoUserPool:
Type: AWS::Cognito::UserPool
Properties:
# Generate a name based on the stage
UserPoolName: ${self:provider.stage}MyUserPool
serverless.yml
functions:
preSignUp:
handler: presignup.handler
events:
- cognitoUserPool:
pool: ${self:provider.stage}MyUserPool
trigger: PreSignUp
resources:
- ${file(resources/cognito-user-pool.yml)}
انتهى الأمر بإنشاء وحدتي UserPools بنفس الاسم وواحدة مع وظيفة المشغل المرفقة ، والأخرى مع السياسات المرفقة والأشياء الأخرى التي أحددها في cognito-user-pool
قضايا مماثلة أو تابعة:
"بدون خادم": "1.30.3"
وجود نفس المشكلة. هل تشعر بالفضول عندما يتم التوصل إلى حل؟
أواجه هذه المشكلة أيضًا ولا يمكنني حلها باتباع الأمثلة الموجودة في المستندات أو المشكلات الأخرى المغلقة
@ Ccastillo06 لقد تمكنت من تصحيح المشكلة من خلال القيام بذلك ... (الأجزاء الغامقة هي القطعة المهمة. لقد نجح هذا الأمر بالنسبة لي حتى بعد أن كنت أعاني من جميع المشكلات.
CognitoUserPoolMyUserPool:
النوع: AWS :: Cognito :: UserPool
الخصائص:
UserPoolName: mypool _ $ { self: Provider.stage } _auth_pool
اسم المستخدم
- البريد الإلكتروني
مخطط:
- الاسم: الاسم_الاسم
AttributeDataType: سلسلة
متغير: صحيح
مطلوب: صحيح
- الاسم: اسم العائلة
AttributeDataType: سلسلة
متغير: صحيح
مطلوب: صحيح
- الاسم: البريد الإلكتروني
AttributeDataType: سلسلة
متغير: خطأ
مطلوب: صحيح
- الاسم: phone_number
AttributeDataType: سلسلة
متغير: صحيح
مطلوب: صحيح
السمات التي تم التحقق منها تلقائيًا:
- البريد الإلكتروني
بعد تأكيد:
المعالج: ..
حجم الذاكرة: ...
الأحداث:
- http:
المسار: ...
الطريقة: وضع
التكامل: لامدا
كورس: صحيح
المفوض:
اكتب: COGNITO_USER_POOLS
المعرف:
المرجع: ApiGatewayAuthorizer
- cognitoUserPool:تجمع: MyUserPoolالمشغل: PostConfirmation
الحل الخاص بك يعمل مثل السحر @ robotlemons !! 🎉 شكرا جزيلا لك على مشاركتها!
الجزء الذي كان محيرًا حقًا بالنسبة لي هو أن المستندات تستدعي CognitoUserPool
كـ MyUserPool
طوال الوقت ، وكنت أقوم بإعداد UserPoolName: ${self:provider.stage}-user-pool
، لذلك اعتقدت أنه عند التصريح عن لامدا ، يجب أن نقوم بما يلي:
- cognitoUserPool:
pool: ${self:provider.stage}-user-pool
trigger: PostConfirmation
اعتقدت أنه بهذه الطريقة كنت أقوم بتعيين نفس الاسم لكليهما ، ولكن المفتاح هنا هو إعطاء السمة pool
نفس قيمة CognitoUserPool الخاصة بك ، ولهذا السبب قامت المستندات بتعيينها على أنها MyUserPool
.
لذلك أخيرًا أعلنت للتو أن مجموع المستخدمين الخاص بي cognito-user-pool.yml
النحو التالي:
Resources:
CognitoUserPoolMyUserPool:
Type: AWS::Cognito::UserPool
Properties:
UserPoolName: ${self:provider.stage}-user-pool
وفي serverless.yml
يتم الإعلان عن لامدا على أنها:
postConfirmation:
handler: src/cognito/postConfirmation.handler
events:
- cognitoUserPool:
pool: MyUserPool // Notice that this one is the declared name of my pool CognitoUserPoolMyUserPool but without the CognitoUserPool part.
trigger: PostConfirmation
أتمنى أن يساعد هذا شخصًا آخر في المستقبل!
شكرا جزيلا مرة أخرى لمساعدتك! 💯
تضمين التغريدة
أنا آسف ، أنا في حيرة من أمري وأحب بعض المساعدة.
لذلك في إعلان PostConfirmation ، في قسم أحداث cognitoUserPool. ماذا يجب أن تكون قيمة "التجمع"؟ لقد جربت الاسم الفعلي لتجمع المستخدمين ويستمر في إنشاء تجمعات مستخدمين جديدة. لقد جربت أيضًا القيمة مباشرةً ضمن "الموارد" (في حالتك "CognitoUserPoolMyUserPool").
الآن في قيمة "pool" ، قلت إنك أدخلت "MyUserPool" بدون جزء CognitoUserPool ، لكن اسم المورد الخاص بي مختلف. إذن ماذا يجب أن يكون اسمي؟ لقد جربت الاسم الكامل ولم ينجح ذلك.
@ Studio2133
Resources:
CognitoUserPoolMyUserPool:
Type: AWS::Cognito::UserPool
Properties:
UserPoolName: ${self:provider.stage}-user-pool
في هذا المثال ، يمكنك استخدام كل ما هو بعد CognitoUserPool كقيمة للتجمع. في هذه الحالة ، سيكون MyUserPool
robotlemons شكرا على الاستجابة السريعة!
لذلك يجب أن أعيد تسمية موردي. حاليًا لا يمكنني البدء بـ CognitoUserPool. حاليًا يطلق عليه فقط: MycompanyUserPool. سأغيرها إلى: CognitoUserPoolMyCompanyUserPool ... هل هذا صحيح؟
نعم
مرسل من الايفون الخاص بي
في 11 أبريل 2019 ، الساعة 12:33 مساءً ، كتب Studio2133 [email protected] :
robotlemons شكرا على الاستجابة السريعة!
لذلك يجب أن أعيد تسمية موردي. حاليًا لا يمكنني البدء بـ CognitoUserPool. حاليًا يطلق عليه فقط: MycompanyUserPool. سأغيرها إلى: CognitoUserPoolMyCompanyUserPool ... هل هذا صحيح؟
-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذه الرسالة الإلكترونية مباشرةً ، أو اعرضها على GitHub ، أو قم بكتم صوت الموضوع.
@ Studio2133 في حالتك ، يجب أن تفعل ما قالتهrobotlemons ، فقط أضف CognitoUserPool
قبل اسم تجمع المستخدم الفعلي MycompanyUserPool
.
لذا في النهاية يجب أن يكون لديك: CognitoUserPoolMycompanyUserPool
لاسم التجمع هذا.
لذلك يجب أن يكون تعريف تجمع المستخدمين في cognito-user-pool.yml
:
Resources:
CognitoUserPoolMycompanyUserPool:
Type: AWS::Cognito::UserPool
Properties:
UserPoolName: ${self:provider.stage}-user-pool
ومن ثم يجب أن يكون تعريف مشغل lambda في serverless.yml
:
postConfirmation:
handler: src/cognito/postConfirmation.handler
events:
- cognitoUserPool:
pool: MycompanyUserPool
trigger: PostConfirmation
لقد نجحت في العمل بشكل جيد بالنسبة لنا في أحدث مشروع لدينا (الاتصال بأجهزة lambdas والخدمات الأخرى من AWS باستخدام مشغل PostConfirmation
) ولم أواجه أي مشاكل على الإطلاق.
تذكر إزالة كل مجموعة مكررة قبل إنشاء التجمعات الثابتة حتى لا يكون هناك شيء محير في لوحة تحكم AWS.
أتمنى أن يكون هذا مفيدًا ويحل المشكلة!
@ Studio2133
عند إضافة حدث cognitoUserPool إلى lambda ، يقوم Serverless تلقائيًا بإنشاء تجمع مستخدم Cognito جديد وإضافته إلى نموذج CloudFormation الذي تم إنشاؤه. اسم المورد المنطقي CloudFormation لهذا التجمع هو CognitoUserPool {normalizedPoolId} ، حيث يعد normalizedPoolId هو الاسم الذي توفره للتجمع في حدث cognitoUserPool. هذا هو التجمع الذي سيتم توصيل المشغل به. لتوصيل المشغل بالمجموعة الخاصة بك التي تعلنها في الموارد ، يمكنك الاستفادة من اصطلاح التسمية هذا لتجاوز المجموعة التي تم إنشاؤها عن طريق إضافة حدث cognitoUserPool. للقيام بذلك ، تحتاج إلى استخدام CognitoUserPool {normalizedPoolId} كاسم المورد المنطقي لمجموعتك في قسم الموارد. سيؤدي ذلك إلى قيام Serverless باستخدام هذا التجمع لتوصيل المشغل به ، بدلاً من إنشاء مجموعة جديدة.
يمكن العثور على مزيد من التفاصيل حول هذا النهج في هذه المقالة.
التعليق الأكثر فائدة
الحل الخاص بك يعمل مثل السحر @ robotlemons !! 🎉 شكرا جزيلا لك على مشاركتها!
الجزء الذي كان محيرًا حقًا بالنسبة لي هو أن المستندات تستدعي
CognitoUserPool
كـMyUserPool
طوال الوقت ، وكنت أقوم بإعدادUserPoolName: ${self:provider.stage}-user-pool
، لذلك اعتقدت أنه عند التصريح عن لامدا ، يجب أن نقوم بما يلي:اعتقدت أنه بهذه الطريقة كنت أقوم بتعيين نفس الاسم لكليهما ، ولكن المفتاح هنا هو إعطاء السمة
pool
نفس قيمة CognitoUserPool الخاصة بك ، ولهذا السبب قامت المستندات بتعيينها على أنهاMyUserPool
.لذلك أخيرًا أعلنت للتو أن مجموع المستخدمين الخاص بي
cognito-user-pool.yml
النحو التالي:وفي
serverless.yml
يتم الإعلان عن لامدا على أنها:أتمنى أن يساعد هذا شخصًا آخر في المستقبل!
شكرا جزيلا مرة أخرى لمساعدتك! 💯