iOS端使用AWS Amplify登录提示用户名或密码错误如何解决
问题原因及对应解决方法
配置类问题
- 确认项目中
amplifyconfiguration.json里的Cognito用户池ID、应用客户端ID,与你查询用户状态的Cognito用户池完全匹配。多环境开发场景下极易出现注册阶段使用开发环境配置,登录阶段误切到其他环境配置的问题,导致两个环境的用户数据不互通。 - 检查对应Cognito应用客户端的认证流配置:进入Cognito控制台→目标用户池→应用集成→应用客户端列表→找到对应客户端,确认"身份验证流"配置中勾选了
ALLOW_USER_PASSWORD_AUTH,未开启该认证流会直接返回用户名或密码错误的通用报错。
传参规则不匹配问题
- 如果你在Cognito用户池配置中设置了用户化化名为邮箱/手机号,登录时必须传入完整的邮箱/手机号作为登录凭证,仅传入自定义用户名字段会校验失败。
- Cognito默认对用户名做大小写不敏感匹配,但部分旧版本Amplify iOS SDK会自动将注册阶段的用户名转为小写存储,登录阶段如果传入带大写的用户名会导致匹配失败。可以在调用登录接口前,先将用户输入的用户名统一转为小写再传递。
验证方式:直接在Cognito控制台的用户管理页使用"登录用户"功能,输入App端尝试登录的用户名密码。如果控制台也报错说明是凭证本身的问题,如果控制台可以正常登录,则100%是客户端参数传递或配置的问题。
密码处理异常问题
- 检查App端是否对用户输入的密码做了多余的编码、转义、自动去除首尾空格等处理,Cognito会严格匹配密码的原始字符串,任何额外的处理都会导致校验失败。
- 可以临时在登录接口调用前打印传入的用户名、密码明文,和注册时的输入做对比,确认参数完全一致。
排查代码示例
func login(username: String, password: String) async { do { let signInResult = try await Amplify.Auth.signIn(username: username, password: password) print("登录成功: \(signInResult.nextStep)") } catch let error as AuthError { print("认证错误描述: \(error.errorDescription)") print("恢复建议: \(error.recoverySuggestion)") if let underlying = error.underlyingError { print("底层错误详情: \(underlying)") } } catch { print("未知错误: \(error.localizedDescription)") } }
内容的提问来源于stack exchange,提问作者SKK
相关产品推荐
相关产品推荐

