上下文
我使用 booth Cognito 用户池和 Cognito 身份池来登录用户。
我想完成一个简单的任务,让用户在 iOS 应用程序(Swift 应用程序)上登录。
我的应用程序基于自定义版本的 Mobile Hub 帮助,以允许使用 Cognito 用户池。参见 A Swift Sample Sign-In App (using aws-mobile hub-helper) with Cognito User Pools
应用程序有两个步骤:第一个只是启动,第二个是在用户点击登录按钮后登录:然后为了最小化而对用户凭据进行硬编码。
在第一步中,用户必须收到未经授权的 identityId。然后在第二步之后,用户收到一个 auth identityId。
行为
在按登录之前,第 1 步,有 2 个请求到 AWS:
- AWSCognitoIdentityService.GetId
- AWSCognitoIdentityService.GetCredentialsForIdentity
媒体签名后还有 3 个请求:
- AWSCognitoIdentityProviderService.InitiateAuth
- AWSCognitoIdentityProviderService.RespondToAuthChallenge
- AWSCognitoIdentityService.GetId
在请求 5 — AWSCognitoIdentityService.GetId — 之前,用户已登录,如 AWSIdentityManagerDidSignInNotification
上的观察者所示。
在请求 5 之后,检索到一个 IdentityId。但是根据通知 AWSIdentityManagerDidSignOutNotification
,用户注销后立即。
可能会发生什么?
最佳答案
查看您的日志会有所帮助。但是您需要意识到的是,cognito sdk 使用钥匙串(keychain)和 NSUserDefaults 记住东西( session ID、身份 ID 等)。因此,当您第二次运行硬编码测试时,测试的行为可能会有所不同。如果您想从头开始,请转到模拟器菜单并选择重置内容和设置(这将清除钥匙串(keychain) - 存储 session 内容,并将清除存储事件 session 的 NSUserDefaults)。
我刚刚在分支 AddAllMobileHubDemos 上推送了一个新版本的 repo。最新版本的存储库定义了 3 个目标。登录、MySampleApp 和 Dom。 SignIn 是我的旧登录应用程序的一个版本,经过修改可与 mobile-hub-helper 一起使用。 MySampleApp 是一个完整下载的 MobileHub 应用程序,内置 Cognito 用户池。还有 Dom,一个单页硬编码登录应用程序。
同时检查(在同一个存储库中)认知图 cognito-diagram.pdf from the latest push ,其中列出了一些可能的错误。该版本具有我上面描述的功能。
如果您发布可能有助于我更具体的日志。在某些情况下,AWSIdentityManager 会将您注销(例如,如果您尝试合并两个身份......如果您使用硬编码的用户名和密码,然后在不注销的情况下更改它们,则可能会很好。)
布鲁斯
关于ios - AWS 认知 : immediately signed-put after sign-in,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40421546/