AWS Amplify Android集成身份认证提示Username should be email错误如何解决
错误原因
- 错误日志明确返回提示
Username should be an email,根本原因是你的AWS Cognito用户池配置了以邮箱作为用户名/登录凭证,调用Amplify.Auth.signUp时传入的第一个参数(即username)需要符合邮箱格式。 - 你当前代码里传入的username值为
Anna,不属于邮箱格式,即使你单独传递了email属性也不符合Cognito的配置要求,因此抛出参数非法异常。
修复方案
方案1:修改代码适配现有Cognito配置(推荐,无需改动后端配置)
直接将signUp接口的第一个username参数替换为你的邮箱变量即可,如果需要保留"Anna"作为用户昵称,可以额外添加name属性到注册配置中:
val username="Anna " val password="PASSword@98" val mail="tmock98@gmail.com" binding.loginBtn.setOnClickListener { if (viewModel.isValid()) { val options = AuthSignUpOptions.builder() .userAttribute(AuthUserAttributeKey.email(), mail.trim()) // 额外添加昵称属性存储原来的username值 .userAttribute(AuthUserAttributeKey.name(), username.trim()) .build() // 第一个参数改为邮箱,符合Cognito要求 Amplify.Auth.signUp(mail.trim(), password.trim(), options, { result: AuthSignUpResult -> Log.i("AuthQuickStart","Result: $result") Toast.makeText(context, "all is good", Toast.LENGTH_SHORT).show() } ) { error: AuthException? -> Log.e("AuthQuickStart","Sign up failed",error) } } }
方案2:修改Cognito用户池配置适配现有代码逻辑
如果你的业务需求就是允许用户用自定义用户名(非邮箱)注册登录,可以到AWS控制台修改Cognito用户池的登录属性:
- 进入AWS Cognito控制台,打开对应用户池的「登录体验」设置页
- 将「登录属性」从「邮箱」修改为「用户名」
- 修改完成后执行
amplify pull同步最新配置到本地Android项目即可
内容的提问来源于stack exchange,提问作者confusedstudent
相关产品推荐
相关产品推荐

