2016-11-24 64 views
0

我正在使用firebase作为后端编写ios应用程序。 在我的应用程序中,有一些管理员应该能够创建新用户。新用户不应该能够自己创建帐户。在没有自动登录的情况下在ios上创建Firebase用户

在网页上,我使用的功能

ref.createUser({ 
     email: ctrl.user.email, 
     password: ctrl.user.password 
    }, function(error, userData) { // } 

随机密码,之后重置密码。因此,用户将收到一封带密码重置链接的电子邮件,然后可以设置新密码并登录。创建用户后,我将所有相关的用户数据存储到数据库中。

iOS上我试图创建一个新用户:

FIRAuth.auth()?.createUser(withEmail: email, password: password) { (user, error) in } 

但如果我这样做,就这样,我与我的管理员账户退出,并与我的新创建的帐户登录。由于这个原因,我无法将用户数据存储到数据库,因为这仅限于管理员。...

有没有办法让ios只创建一个用户,而不用自动登录这个用户?

最良好的祝愿

托比

编辑 我写了一个AWS lambda函数与火力的Admin SDK用于node.js的,并通过Web服务创建函数内部的用户和触发功能来自我的iOS应用程序。 不完美,但工作....

回答

0

是的,调用createUser(withEmail:, password:)将登录一个新的用户。要达到什么样的你正在尝试做的,我建议做这样的一种解决方法(假设当前的管理员已登录):

// Create the values 
var email = alreadySelectedUserEmail 
var password = arc4random_uniform(1000000) // or another random number 

// Send the information to the database 
FIRDatabase.database().reference().child("user_data").child(email) . 
     setValue("lorem ipsum") // or another value 

// THEN create the user, AFTER sending the data 
     // This will automatically log you in to the new account 
FIRAuth.auth()?.createUser(withEmail: email, 
     password: password) { (user, error) in 
    // Check for any errors 
    if let error = error { 
     print error 
    } else { 
     // If there are none, LOG OUT… 
     try! FIRAuth.auth()!.signOut() 

     // …and log back into Admin (with whatever login info they have) 
     FIRAuth.auth()?.signIn(withEmail: adminEmail, 
       password: adminPassword) { (user, error) in 
      // Check for any errors 
      if let error = error { 
       print error 
      } else { 
       // All done, new account created! 
      } 
    } 
} 
+0

有过类似的想法,但我如何得到ADMINPASSWORD? 我可以在初始管理员登录时以UserDefault-Value的形式存储它,但是如果管理员更改了密码,那又如何呢? – Tobi

+0

现在,我已经为Node.JS编写了一个AWS Lambda函数和Firebase Admin SDK,并通过来自ios-app的webservice调用创建用户。 – Tobi

相关问题