为其他用户创建Firebase身份验证帐户

5uzkadbs  于 2023-01-14  发布在  其他
关注(0)|答案(2)|浏览(147)

我有一个Flutter应用程序,管理员可以在其中为其他用户创建帐户(使用Firebase Authentication)。
我的逻辑与以下几点相似:

UserCredential userCredential =
  await authService.instance.createUserWithEmailAndPassword(
  email: emailController.text,
  password: passwordController.text,
);

main.dart

MaterialApp(
      home: StreamBuilder<User>(
        stream: authentcationService.authStateChanges,
        builder: (context, snapshot) {
          // Build the app
          // ...
        },
       )
)

但是,我注意到这会触发上面stream中的身份验证状态更改:调用createUserWithEmailAndPassword是注销当前用户并登录新创建的用户,而不是简单地在Firebase Authentication中创建一个新用户。

erhoui1w

erhoui1w1#

当你创建一个用户,它会自动登录他们在同一时间在我的经验,无论注册方法。即使你注销后,登录的用户仍然会改变。
也许你可以实现一个云功能来创建一个用户?(如果这是可能的?)或者你可以保存正确的/admin用户名密码,并自动注销新创建的帐户,并在创建后重新登录到管理员帐户?
示例:(以创建帐户的管理员身份登录)(伪代码)

_createNewUserAsAdmin(email, password){
 var adminPass = SharedPreferences.adminPass;
 var adminEmail = SharedPreferences.adminEmail;

_auth.logout();

 var newUser= _auth.createUser(email, password);
 if(newUser == null){} //error creating user (user object is null), handle error and log back into admin
 else{
  _auth.logout()(
  _auth.signIn(adminEmail, adminPass);
 }
}

不过,您可能需要更改流/授权应用 Package 器来处理此活动。
编辑:这个答案有更深入的解决方案:https://stackoverflow.com/a/38013551/13714686
我个人会考虑通过Firebase的云功能来创建新用户,这似乎是最简单的设置。Firebase也有从文件创建用户的选项,如果你想让你的管理员批量添加用户,你可以查看更多(尽管,我认为这个功能是命令行工具)

mccptt67

mccptt672#

我看过很多关于这个问题的讨论,我找到了很多复杂而艰难的解释和答案。
但是,老实说,这是从经过身份验证的帐户执行帐户创建的最小和最好的方法,保持新用户注销,而不替换当前用户。

FirebaseApp tempApp = await Firebase.initializeApp(name: "flutter", options: Firebase.app().options);

UserCredential newUser = await FirebaseAuth.instanceFor(app: tempApp).createUserWithEmailAndPassword(email: email0, password: password0);

相关问题