对于错误报告:
cognito-user-pool.yml
Resources:
CognitoUserPool:
Type: AWS::Cognito::UserPool
Properties:
# Generate a name based on the stage
UserPoolName: ${self:provider.stage}MyUserPool
无服务器
functions:
preSignUp:
handler: presignup.handler
events:
- cognitoUserPool:
pool: ${self:provider.stage}MyUserPool
trigger: PreSignUp
resources:
- ${file(resources/cognito-user-pool.yml)}
最后,创建了两个具有相同名称的UserPool,一个具有附加的触发功能,另一个具有附加的策略以及我在Cognito-User-Pool中定义的其他内容
相似或相关的问题:
“无服务器”:“ 1.30.3”
有同样的问题。 好奇何时可以达成解决方案?
我也有这个问题,无法按照文档中的示例或其他已解决的问题来解决
@ Ccastillo06这样就可以解决问题了……(加粗的部分是重要的部分。即使我遇到了所有问题,这也确实对我
CognitoUserPoolMyUserPool:
类型:AWS :: Cognito :: UserPool
特性:
UserPoolName:mypool _ $ { self:provider.stage } _auth_pool
用户名属性:
-电子邮件
架构:
-名称:gived_name
AttributeDataType:字符串
可变:正确
必填:true
-名称:family_name
AttributeDataType:字符串
可变:正确
必填:true
-名称:电子邮件
AttributeDataType:字符串
可变:错误
必填:true
-名称:phone_number
AttributeDataType:字符串
可变:正确
必填:true
AutoVerifiedAttributes:
-电子邮件
确认后:
处理程序:..
内存大小:...
事件:
-http:
路径:...
方法:放
集成:lambda
cors:是的
授权人:
类型:COGNITO_USER_POOLS
authorizerId:
参考:ApiGatewayAuthorizer
-cognitoUserPool:池:MyUserPool触发条件:后确认
您的解决方案就像一个魅力@robotlemons ! 非常感谢您的分享!
令我感到困惑的部分是,文档一直将CognitoUserPool
称为MyUserPool
,而我正在设置UserPoolName: ${self:provider.stage}-user-pool
,所以我认为在声明lambda时,我们应该做:
- 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
,lambda声明为:
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
希望这对以后的人有所帮助!
再次非常感谢您的帮助! 💯
@ Ccastillo06
抱歉,我很困惑,很乐意提供帮助。
因此,在PostConfirmation声明的cognitoUserPool事件部分中。 “ pool”的值应该是多少? 我已经尝试了用户池的实际名称,并且一直在创建新的用户池。 我也尝试过直接在“资源”(在您的情况下为“ CognitoUserPoolMyUserPool”)下的值。
现在,在您的“池”值中,您说您输入的“ MyUserPool”没有CognitoUserPool部分,但是我的资源名称不同。 那我叫什么名字? 我已经尝试过使用全名,但这不起作用。
@工作室2133
Resources:
CognitoUserPoolMyUserPool:
Type: AWS::Cognito::UserPool
Properties:
UserPoolName: ${self:provider.stage}-user-pool
在此示例中,您将使用CognitoUserPool之后的任何值作为池值。 在这种情况下,它将是MyUserPool
@robotlemons感谢您的及时回复!
所以我应该重命名我的资源。 目前,我还没有CognitoUserPool开头。 目前,它的名称为:MycompanyUserPool。 我将其更改为:CognitoUserPoolMyCompanyUserPool ...正确吗?
是
从我的iPhone发送
2019年4月11日下午12:33,Studio2133 [email protected]写道:
@robotlemons感谢您的及时回复!
所以我应该重命名我的资源。 目前,我还没有CognitoUserPool开头。 目前,它的名称为:MycompanyUserPool。 我将其更改为:CognitoUserPoolMyCompanyUserPool ...正确吗?
-
您收到此邮件是因为有人提到您。
直接回复此电子邮件,在GitHub上查看,或使该线程静音。
@ Studio2133您应该按照@robotlemons的说明进行操作,只需在实际用户池MycompanyUserPool
的名称之前添加CognitoUserPool
MycompanyUserPool
。
因此,最后您应该具有: CognitoUserPoolMycompanyUserPool
作为该池名称。
因此,您在cognito-user-pool.yml
用户池定义应为:
Resources:
CognitoUserPoolMycompanyUserPool:
Type: AWS::Cognito::UserPool
Properties:
UserPoolName: ${self:provider.stage}-user-pool
然后serverless.yml
的lambda触发器定义应为:
postConfirmation:
handler: src/cognito/postConfirmation.handler
events:
- cognitoUserPool:
pool: MycompanyUserPool
trigger: PostConfirmation
我在最近的项目中对我们来说还算不错(使用PostConfirmation
触发器从AWS调用其他lambda和服务),根本没有任何问题。
在创建固定池之前,请记住删除所有重复的池,这样AWS控制面板中不会造成任何混乱。
希望这对您有帮助并解决问题!
@工作室2133
将cognitoUserPool事件添加到lambda时,Serverless会自动生成一个新的Cognito用户池,并将其添加到您生成的CloudFormation模板中。 此池的CloudFormation逻辑资源名称为CognitoUserPool {normalizedPoolId},其中normalizedPoolId是您在cognitoUserPool事件中为池提供的名称。 这是触发器将连接到的池。 为了将触发器连接到您在参考资料中声明的自己的池,您可以利用此命名约定来覆盖通过添加cognitoUserPool事件生成的池。 为此,您需要在“资源”部分中使用CognitoUserPool {normalizedPoolId}作为池的逻辑资源名称。 这将导致Serverless使用此池将触发器连接到,而不是生成新触发器。
这种方法的更多细节中可以找到这个文章。
最有用的评论
您的解决方案就像一个魅力@robotlemons ! 非常感谢您的分享!
令我感到困惑的部分是,文档一直将
CognitoUserPool
称为MyUserPool
,而我正在设置UserPoolName: ${self:provider.stage}-user-pool
,所以我认为在声明lambda时,我们应该做:我以为这样可以为两者设置相同的名称,但是这里的关键是为
pool
属性赋予与您的CognitoUserPool相同的值,因此为什么文档将其设置为MyUserPool
。所以我终于在
cognito-user-pool.yml
声明了我的用户池为:在
serverless.yml
,lambda声明为:希望这对以后的人有所帮助!
再次非常感谢您的帮助! 💯