You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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用户池的登录属性:

  1. 进入AWS Cognito控制台,打开对应用户池的「登录体验」设置页
  2. 将「登录属性」从「邮箱」修改为「用户名」
  3. 修改完成后执行amplify pull同步最新配置到本地Android项目即可

内容的提问来源于stack exchange,提问作者confusedstudent

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 11:24:06