注册后无法使用iOS Cognito UserPool SDK更改用户属性

慕尼

我试图在用户注册后更改用户的属性(即姓)。此属性已在Cognito用户池中选择,并在他们最初注册时填写。我只设置了一个用户池而不是一个身份池。

为此,我正在使用iOS SDKadminUpdateUserAttributes中的中的方法AWSCognitoIdentityProvider但它给了我以下错误:

Error Domain=com.amazonaws.AWSCognitoIdentityErrorDomain Code=0 "(null)" UserInfo={__type=MissingAuthenticationTokenException, message=Missing Authentication Token}

这是我在AppDelegate中的设置:

    let clientId:String = self.cognitoConfig!.getClientId()
    let poolId:String = self.cognitoConfig!.getPoolId()
    let clientSecret:String = self.cognitoConfig!.getClientSecret()
    let region:AWSRegionType = self.cognitoConfig!.getRegion()



    let serviceConfiguration:AWSServiceConfiguration = AWSServiceConfiguration(region: region, credentialsProvider: nil)
    let cognitoConfiguration:AWSCognitoIdentityUserPoolConfiguration = AWSCognitoIdentityUserPoolConfiguration(clientId: clientId, clientSecret: clientSecret, poolId: poolId)
    AWSCognitoIdentityUserPool.register(with: serviceConfiguration, userPoolConfiguration: cognitoConfiguration, forKey: userPoolID)
    let pool:AWSCognitoIdentityUserPool = AppDelegate.defaultUserPool()
    pool.delegate = self

    AWSServiceManager.default().defaultServiceConfiguration = serviceConfiguration

这是我实际上尝试更改属性的代码

    let identityProvider = AWSCognitoIdentityProvider.default()


    let requestAttributeChange = AWSCognitoIdentityProviderAdminUpdateUserAttributesRequest()
    requestAttributeChange?.username = user?.username
    requestAttributeChange?.userPoolId = AppDelegate.defaultUserPool().userPoolConfiguration.poolId

    let attribute = AWSCognitoIdentityProviderAttributeType.init()
    attribute?.name = "given_name"
    attribute?.value = "TEST"

    if let att = attribute {

        print("Change attribute")
        requestAttributeChange?.userAttributes = [att]

        identityProvider.adminUpdateUserAttributes(requestAttributeChange!).continueWith(block: { (res) -> Any? in
            print(res.error)
        })
    }

我也需要设置一个单独的身份池吗?我也不确定要获得更多访问权限还需要存储的数据/密钥的类型?由于我试图避免在实际设备上存储任何敏感数据。

慕尼

因此,我的方法行不通,因为它还要求我也创建一个身份池。如果您已经有一个身份池,那么上述方法可能会起作用,但是由于您迫使管理员以非常简单的方式进行操作,因此它有点肮脏/不安全。

由于这个问题资源,我找到了一个更好的解决方案

这是swift 4语法中的相同答案。

let attr = AWSCognitoIdentityUserAttributeType.init(name: "given_name", value: "TEST")

user?.update([attr]).continueOnSuccessWith(block: { (response) -> Any? in
    // Was successful, do any changes, UI changes must be done on the main thread.
    return nil
 })

您也可以通过这种方式更新自定义属性只要确保在通过aws面板添加自定义属性时,您就可以进入AWS Cognito UserPool。转到常规设置->应用程序客户端->单击“显示详细信息”->单击“设置属性读取和写入权限”,然后为新创建的自定义属性指定适当的读取和写入权限。

更新自定义属性时,只需要custom在属性名称之前包括标签。因此,例如,school将按如下方式创建一个名为的属性

let attr = AWSCognitoIdentityUserAttributeType.init(name: "custom:school", value: "Junior High")

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用 AWS Cognito Userpool 令牌登录 AWS Api 网关?

使用配置为触发器的lambda创建Cognito UserPool

可以使用iOS SDK在Amazon Cognito中更改用户名吗?

如何在 Android 上使用 Cognito/UserPool 登录后实现 signOut

AWS Cognito UserPool-将ID列表转换为User属性列表

使用具有Lamda功能和资源的同一Cognito UserPool?

我们可以使用Cloudformation为Cognito UserPool定义社交提供程序吗?

如何使用aws cdk使用Cognito UserPool作为身份验证提供程序之一创建Cognito IdentityPool?

AWS Cognito UserPool-恢复选项

通过Cloudformation文件的AWS Cognito Userpool

在Cloudformation中将Lambda触发器附加到Cognito UserPool

AWS Cognito UserPool 与 IdentityPool:IdentityPool 是强制性的吗?

如何使用AWS Cognito Ruby SDK注册新用户?

Facebook iOS SDK 4.x:更改用户登录

添加/更改用户后,CustomAuthorize属性未更新

使用Cognito验证用户身份

如何通过CloudFormation禁用Cognito用户注册?

注册时创建Cognito用户池

拒绝Cognito用户池中的注册请求

在使用AWS Cognito用户池注册期间验证请求的密码

Cognito用户池:在AWS Cognito Java SDK中,如何在accessToken过期后使用refreshToken获取新的accessToken?

更改用户密码后无法登录

更改用户后,Hibernate无法运行

更改用户后无法拉推

如何使用 PHP SDK 登录 AWS Cognito 用户池

如何在 iOS 上获取 Cognito 用户池“sub”属性

无法更改用户密码

如何在Cognito中使用adminGetUserRequest获取用户属性

AWS iOS SDK 2.4.0和Cognito文档