如何在 shoudPerformSegueWithIdentifier 和 Firebase 中对用户进行身份验证?

Posted

技术标签:

【中文标题】如何在 shoudPerformSegueWithIdentifier 和 Firebase 中对用户进行身份验证?【英文标题】:How do I authenticate users in shoudPerformSegueWithIdentifier and Firebase? 【发布时间】:2015-11-24 16:18:55 【问题描述】:

我正在尝试使用 ios swift 和 Firebase 在情节提要中创建身份验证页面。这是我的故事板声明:

然后我使用shouldPerformSegueWithIdentifier 对其进行身份验证。但是,我还要在 Firebase 中记录用户,所以我的代码是这样的:

override func shouldPerformSegueWithIdentifier(identifier: String, sender: AnyObject?) -> Bool 
if db.authData != nil 

  return true

 else 

  let email = emailTextField.text
  let password = passwordTextField.text

  db.authUser(email, password: password, withCompletionBlock: 
    error, authData in
    if error != nil 
      print(error.description)
     else 
      print("logged in")
    
  )

  return false

此代码有些工作,但我必须单击登录按钮两次,因为第一次在 Firebase 中登录用户,第二次 db.authData 不再为零,因为用户已经登录所以它返回真。我不想点击两次才能登录,我只想点击一次。我不能只将return truereturn false 放在withCompletionBlock 中,因为该块返回无效。我该如何完成这项工作?

【问题讨论】:

不能同步db.authUser调用吗? 或更简单地说,不要在shouldPerformSegue 中进行此身份验证检查。您应该在用户单击“登录”并在身份验证块中调用 auth 方法,检查错误/nil,如果一切正常,则执行实际的 segue 【参考方案1】:

使用当前实现您无法实现此功能。您有两种方法可以做到这一点:

    使db.authUser() 同步并返回结果 不要将登录按钮连接到下一个屏幕,而是添加一个 IBAction 方法并像这样实现该方法

@IBAction func login(sender : AnyObject?)

   let email = emailTextField.text
   let password = passwordTextField.text

   db.authUser(email, password: password, withCompletionBlock: 
     error, authData in
       if error != nil
       
          print(error.description)
       
       else
       
          // Navigate to next screen
          // Start perform segue here
       
    )  

【讨论】:

我发现这可以让我登录,但它似乎没有调用prepareForSegue 函数,因此我可以将一些变量传输到下一个控制器。我怎样才能让它在我导航到下一个 uiviewcontroller 之前调用prepareForSegue @user3904534:你如何导航到下一个屏幕? 像这样:self.presentViewController(nextViewController!, animated: true, completion: nil) @user3904534:您可以使用nextViewController 设置数据并设置所需的属性。像 nextViewController.yourProperty = value;或者您可以以编程方式执行 segue self.performSegueWithIdentifier("YourSegueName", sender:self); 行得通!非常感谢你!在我打电话给 presentViewController 之前,我做了nextViewController.myProperty = myProperty

以上是关于如何在 shoudPerformSegueWithIdentifier 和 Firebase 中对用户进行身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

如何在表单提交后保留文本(如何在提交后不删除自身?)

如何在异步任务中调用意图?或者如何在 onPostExecute 中开始新的活动?

在 Avkit 中如何使用这三行代码,以及如何将音乐静音”

如何在 JDBC 中启动事务?

如何在 Fragment 中调用 OnActivityResult 以及它是如何工作的?

如何使用 Firebase 在 Web 上托管 Flutter?它的效果如何?