关键词:
【中文标题】如何在 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
。如何在堆栈中将文本放置在图像上?
】如何在堆栈中将文本放置在图像上?【英文标题】: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... 查看详情