【问题标题】:How do I authenticate users in shoudPerformSegueWithIdentifier and Firebase?如何在 shoudPerformSegueWithIdentifier 和 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

标签: ios swift firebase


【解决方案1】:

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

  1. 使db.authUser() 同步并返回结果
  2. 不要将登录按钮连接到下一个屏幕,而是添加一个 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
猜你喜欢
  • 2019-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-30
  • 1970-01-01
  • 2017-03-11
  • 2020-07-09
  • 1970-01-01
相关资源
最近更新 更多