Flutter firebase_ui_auth:如何获取SignInScreen中邮箱密码输入框内容
解决方案
1. 自定义邮箱认证提供者
创建继承自EmailAuthProvider的子类,重写登录、注册方法,在执行Firebase原生认证逻辑前后,将邮箱和密码同步到自有后端:
class CustomEmailAuthProvider extends EmailAuthProvider { @override Future<UserCredential> signInWithEmailAndPassword( FirebaseAuth auth, String email, String password, ) async { // 同步登录数据到自有后端 await _syncToBackend(email, password, isSignUp: false); // 执行Firebase原生登录流程 final credential = await super.signInWithEmailAndPassword(auth, email, password); return credential; } @override Future<UserCredential> createUserWithEmailAndPassword( FirebaseAuth auth, String email, String password, ) async { // 同步注册数据到自有后端 await _syncToBackend(email, password, isSignUp: true); // 执行Firebase原生注册流程 final credential = await super.createUserWithEmailAndPassword(auth, email, password); return credential; } // 自定义后端同步方法 Future<void> _syncToBackend(String email, String password, {required bool isSignUp}) async { // 替换为你的后端API请求逻辑 final response = await http.post( Uri.parse('https://your-backend-domain.com/${isSignUp ? 'register' : 'login'}'), headers: {'Content-Type': 'application/json'}, body: jsonEncode({ 'email': email, 'password': password, }), ); // 后端验证失败时抛出异常,终止Firebase认证流程 if (response.statusCode != 200) { throw Exception('Backend sync failed: ${response.body}'); } } }
2. 在SignInScreen中替换默认提供者
构建SignInScreen时,用自定义提供者替换默认的EmailAuthProvider:
SignInScreen( providers: [ CustomEmailAuthProvider(), // 保留其他需要的认证提供者(如GoogleAuthProvider等) ], // 你的其他SignInScreen配置项 )
注意事项
- 必须使用HTTPS协议发送数据到后端,避免密码明文传输
- 可根据后端返回结果决定是否继续Firebase认证流程,后端验证不通过时抛出异常即可中断操作
- 如需额外输入校验逻辑,可在
_syncToBackend方法中添加前置验证
内容的提问来源于stack exchange,提问作者Husain Nahar
相关产品推荐
相关产品推荐

