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

     2023-03-14     45

关键词:

【中文标题】如何在 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

如何在堆栈中将文本放置在图像上?

】如何在堆栈中将文本放置在图像上?【英文标题】:HowcanIpositiontextoverimageeachotherinastack?【发布时间】:2020-10-1814:58:09【问题描述】:我一直在尝试在颤动中创建一张小卡片,并且我一直在尝试掌握堆栈的窍门以及如何将物品... 查看详情

如何在 JDBC 中启动事务?

】如何在JDBC中启动事务?【英文标题】:HowtostartatransactioninJDBC?【发布时间】:2011-06-2320:41:53【问题描述】:Connection.setTransactionIsolation(int)警告:注意:如果在事务期间调用此方法,则结果是实现定义的。这就引出了一个问题:... 查看详情

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

】如何在表单提交后保留文本(如何在提交后不删除自身?)【英文标题】:Howtopersisttextafteraformsubmit(howtonotdeleteitselfaftersubmit?)【发布时间】:2017-03-0820:36:18【问题描述】:如何在文本框中保存和重新填充文本?每次点击保存,... 查看详情

如何在 APNS 中发布推送通知以及如何在 iPhone 中显示通知?

】如何在APNS中发布推送通知以及如何在iPhone中显示通知?【英文标题】:HowtopostpushnotificationsinAPNSandhowtoshowthenotificationsiniPhone?【发布时间】:2012-04-1113:01:11【问题描述】:我对APNS有几个疑问。我正在努力澄清APNS,但仍需要一些... 查看详情

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

】如何在异步任务中调用意图?或者如何在onPostExecute中开始新的活动?【英文标题】:howtocallintentinasynctask?orhowtostartnewactivityinonPostExecute?【发布时间】:2016-06-1109:15:54【问题描述】:有人可以帮助我如何在onPostExecute中调用新活... 查看详情

如何在变量中获得蜂巢输出?

】如何在变量中获得蜂巢输出?【英文标题】:howtogethiveoutputinvariable?【发布时间】:2015-03-2809:06:52【问题描述】:如何将hive查询结果放入一个变量中?在SQL中,我们使用以下查询。Declare@cntasintSelect@cnt=count(*)fromtabname@cnt将在整... 查看详情

如何在 PickerView 顶部添加一个按钮以及如何在单击该按钮时关闭 PickerView?

】如何在PickerView顶部添加一个按钮以及如何在单击该按钮时关闭PickerView?【英文标题】:HowtoaddabuttonontopofaPickerViewandHowtodismissthePickerViewonclickofthatbutton?【发布时间】:2011-12-1207:33:01【问题描述】:我有一个UIPickerView。我想在选... 查看详情

如何在发布管道中使用输出变量

】如何在发布管道中使用输出变量【英文标题】:HowtouseOutputVariablesinReleasepipeline【发布时间】:2020-04-0916:24:25【问题描述】:我搜索了所有关于输出变量用于构建管道的文档,只告诉我如何在.yaml中设置。但是如何在发布管道中... 查看详情

SwiftUI / iOS / iPhone如何在存储之前加密数据/图像以及在哪里/如何在本地存储,一般最佳实践?

】SwiftUI/iOS/iPhone如何在存储之前加密数据/图像以及在哪里/如何在本地存储,一般最佳实践?【英文标题】:SwiftUI/iOS/iPhonehowtoencryptdata/imagebeforestoringandwhere/howtostorelocally,generalbestpractice?【发布时间】:2021-06-1400:17:47【问题描述】... 查看详情

在Vue.js中,如何在选择所显示的元素时,如何在选择时将事件射击?

】在Vue.js中,如何在选择所显示的元素时,如何在选择时将事件射击?【英文标题】:InVue.js,howcanIgetaneventtofireinaselectwhenthedisplayedelementischosen?【发布时间】:2019-12-0307:25:03【问题描述】:这是一个小提琴示例:https://jsfiddle.net/40... 查看详情

在 Grails 中,如何在字段旁边显示验证错误消息?

】在Grails中,如何在字段旁边显示验证错误消息?【英文标题】:InGrails,howdoIdisplayvalidationerrormessagesnexttothefields?【发布时间】:2012-06-1204:59:56【问题描述】:用于验证的Grails2.0.4documentation向您展示了如何在页面顶部显示错误消... 查看详情

授权后如何抓拍?以及如何退款?在omnipay

】授权后如何抓拍?以及如何退款?在omnipay【英文标题】:Howtodoacaptureafteranauthorize?andhowtodoarefund?inomnipay【发布时间】:2013-09-0113:59:12【问题描述】:omnipay没有完整的文档!我正在尝试在授权后进行捕获,但我似乎无法正确处... 查看详情

如何从 Django 在前端获取 CSRF 令牌以及如何在 Postman 中使用它

】如何从Django在前端获取CSRF令牌以及如何在Postman中使用它【英文标题】:HowtogetCSRFtokeninfrontendfromDjangoandhowtouseitinPostman【发布时间】:2021-10-0720:56:59【问题描述】:我是Django的新手,假设我有一个单独的前端(比如Angular或react... 查看详情

UIAlertView,如何在里面放置很多按钮?

】UIAlertView,如何在里面放置很多按钮?【英文标题】:UIAlertView,howtoplacealotofbuttonsinsideit?【发布时间】:2011-09-2615:54:01【问题描述】:在UIAlertView中,如何在其中放置大量按钮?我有一个警报视图,想在其中放置十个按钮,但是... 查看详情

如何在每个循环中添加新数据以及如何在 matlab 中描述“循环”更好

】如何在每个循环中添加新数据以及如何在matlab中描述“循环”更好【英文标题】:howtoaddnewdataeachcycleandhowtodescribe\'cycle\'inmatlabisbetter【发布时间】:2018-06-2520:19:44【问题描述】:我想应用论文中描述的动态粗糙K-means算法:粗聚... 查看详情

如何在 applicationDidEnterBackground 中停止 UIDynamicAnimator

】如何在applicationDidEnterBackground中停止UIDynamicAnimator【英文标题】:HowtostopUIDynamicAnimatorinapplicationDidEnterBackground【发布时间】:2014-08-2604:28:57【问题描述】:当applicationDidEnterBackground被调用时,如何停止UIDynamicAnimator?另外,如何... 查看详情

btree如何存储在磁盘上?

】btree如何存储在磁盘上?【英文标题】:Howbtreeisstoredondisc?【发布时间】:2011-06-0823:54:22【问题描述】:我知道如何在内存中实现btree,但不清楚如何将btree存储在磁盘中。我认为有两个主要区别:内存指针和磁盘地址之间的转... 查看详情

如何在 swift 3.0 中编写此代码,特别是如何在 swift3 中使用宏?

】如何在swift3.0中编写此代码,特别是如何在swift3中使用宏?【英文标题】:Howtowritethiscodeinswift3.0,speciallyhowtouseMacroinswift3?【发布时间】:2017-02-0610:35:19【问题描述】:如何在swift3.0中编写这段代码?NSSTring*countString=[NSStringstringWi... 查看详情