Flutter+Amplify Studio手机号注册时出现无效邮箱格式错误
解决Flutter Amplify手机号注册时的「无效邮箱格式」错误
错误根源
你的代码存在字段赋值错误:将CognitoUserAttributeKey.phoneNumber属性的值设置为了_email.text,但当前场景是手机号注册,用户输入的是手机号而非邮箱,这个值会被Cognito当作邮箱格式校验,自然触发「无效邮箱格式」的错误。
修复步骤
修正字段赋值
将phoneNumber属性的值改为手机号输入框的内容(比如_phoneNumber.text,需确保你有对应的手机号输入控件),而非复用邮箱输入框的值。规范手机号格式
Cognito要求手机号必须包含国际区号前缀,例如中国手机号需格式化为+8613xxxxxxxxx,不能只填写纯数字。调整用户名参数(可选)
如果你的认证逻辑是用手机号作为用户名,需将username参数也改为手机号输入框的内容,避免混淆邮箱和手机号的用途。
修正后的代码示例
Future<void> signUpWithPhoneVerification() async { await Amplify.Auth.signUp( // 若用手机号作为用户名,替换为手机号输入框内容 username: _phoneNumber.text, password: _password.text, options: CognitoSignUpOptions( userAttributes: <CognitoUserAttributeKey, String>{ // 若业务需要收集邮箱则保留,否则可移除(需匹配Amplify用户池配置) CognitoUserAttributeKey.email: _email.text, // 修正:赋值为手机号输入框内容,且带国际区号 CognitoUserAttributeKey.phoneNumber: _phoneNumber.text, }, ), ); }
额外检查点
- 确认Amplify Studio用户池配置:如果仅需手机号认证,检查是否关闭了「强制要求邮箱」的选项,避免不必要的字段校验。
- 前端输入校验:在调用注册接口前,提前校验手机号格式(是否带区号、位数是否合规),提前拦截格式错误。
内容的提问来源于stack exchange,提问作者wuuyungwuu
相关产品推荐
相关产品推荐

