创建多个用户凭据而不丢失当前状态(已登录用户)Firebase Flutter



我想以管理员身份登录,但也想为其他用户创建用户登录凭据。使用createUserWithEmailAndPassword((方法,但它意外地记录了一个新创建的用户。

在此处输入图像描述我已经尝试过其他方法,但在我的情况下不起作用。请帮我做这件事。样本代码::

class _TestScreenState extends State<TestScreen> {
final _emailController = TextEditingController();
final _passwordController = TextEditingController();
final FirebaseFirestore _fs = FirebaseFirestore.instance;
final FirebaseAuth _auth = FirebaseAuth.instance;
bool _isLoading = false;
final User _currentUser = FirebaseAuth.instance.currentUser;
Future<void> _createUser() async {
try {
setState(() {
_isLoading = true;
});
await _auth
.createUserWithEmailAndPassword(
email: _emailController.text,
password: _passwordController.text,
)
.then((UserCredential _user) async {
try {
await _fs.collection('users').doc(_user.user.uid).set({
'email': _emailController.text,
'password': _passwordController.text,
}).then((value) {
setState(() {
_isLoading = false;
});
});
} catch (err) {
_user.user.delete();
print("User Deleted");
setState(() {
_isLoading = false;
});
}
});
} catch (err) {
print("Cannot Sign Up: $err");
setState(() {
_isLoading = false;
});
}
}
@override
Widget build(BuildContext context) {
print("USER--" + _currentUser.uid);
return Scaffold(
appBar: AppBar(title: Text("Test Screen")),
body: Padding(
padding: const EdgeInsets.all(20.0),
child: Column(
children: [
TextField(
controller: _emailController,
),
SizedBox(
height: 20,
),
TextField(
controller: _passwordController,
),
SizedBox(height: 30),
ElevatedButton(
onPressed: _createUser,
child: Text(_isLoading ? "Creating..." : "Create User"),
),
],
),
),
);
}
}

在Firebase身份验证中,每个FirebaseAuth对象都有一个登录用户。如果要登录多个用户,则需要基于显式FirebaseApp对象(而不是默认的FirebaseAuth.instance(的FirebaseAuth类的多个实例。

请注意,这是一种常见的反模式。例如,想要在应用程序中有一个可以创建其他用户帐户的管理用户,通常可以通过创建自定义后端API(例如在云功能上(来更好地处理,然后您可以在其中使用专门为此类管理功能制作的管理SDK。