如何在 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 true
或return 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 中开始新的活动?