存储用户令牌,如果无效令牌 - 存在登录页面,

时间:2015-12-05 16:38:59

标签: ios swift login

学习iOS Swift编程并想了解如何实施用户登录过程

后端-iOS机制是:

  • 用户使用电子邮件和密码登录
  • 服务器返回用户令牌和用户ID
  • 在后续请求中,发送用户令牌和用户ID以获取数据/使用App。

我对iOS实施有疑问。

  1. 将用户令牌和用户ID存储在Core Data中。会不会有 如果我从Core获得每个屏幕上的用户令牌,那么任何缓慢 数据?
  2. 如果登录令牌在任何屏幕上过期或无效,如何退回到登录页面?我应该检查JSON输出并在每个屏幕上都有代码“present login VC”吗?是否有简化的方法将代码抽象为swift或cocoa touch文件?

2 个答案:

答案 0 :(得分:3)

实际上,有很多方法。这一切都取决于你,你将如何管理它。我可以指出两个例子,我自己如何管理它。

使用NSOperation

在WWDC 2015上有一个很棒的会议,关于高级NSOperationsHere it is.

基本上,您创建了NSOperaton的子类,并使其他操作依赖于它。在您的情况下,您将具有用户登录的操作,并且所有其他操作将取决于用户登录(当然只有那些需要它的人)。如果成功,则执行操作。在用户登录操作中,您将检查,如果用户已经登录,并且您有一个令牌,如果没有,则显示当前的日志记录屏幕。

基于WWDC的谈话,还有一个名为Operations的真棒库。 Here it is.

使用PromiseKit

这是另一个,使用PromiseKit。它与运营并没有多大区别,但在我看来,更简单一些。您创建Promise以确保您已登录。制作一系列承诺非常简单,因此您承诺用户登录并从中链接任何其他内容。如果登录成功,则承诺链继续执行。

这一切都基于另一个很棒的库,PromiseKitHere it is

一旦你理解了它,它非常强大且使用起来非常简单。它有很好的文档记录,并有一堆教程here

还有很多其他的方法,所以你可以选择任何一种方法,然后将它们与你喜欢的方法结合起来。

询问您的第一个问题,您将其设为异步,因此,当您发出网络请求时CoreData的缓慢程度并不重要。

答案 1 :(得分:0)

1 - 嗯,是的,有点。但我怀疑你会注意到任何延迟或任何事情:CoreData非常快,并且不需要花费任何大量时间来获取一个对象。或者,保存此数据的CoreData对象(我们称之为User)可以是UIApplicationDelegate子类的属性(让我们称之为MyAppDelegate)。您将获取此User - application:didFinishLaunchingWithOptions:,并在login / logout / expire / etc上更新它。通过这种方式,您可以从任何地方访问它,并且您无需在需要时随时从CoreData中获取它 此外,您可以使用iOS Keychain代替CoreData。 (这里有tutorial可能对此有帮助。)

2 - 再次,您可以使用MyAppDelegate。例如,您可以向其添加方法,这将保存当前导航状态,并将UIWindow的根控制器更改为您的LoginViewController。或者它会在当前控制器上显示LoginViewController。成功登录后,您将导航堆栈返回到先前的状态 此外,您可以将此代码移动到某种NavigationController - 类来处理这种情况。它会有类似的东西 func checkToken(Dictionary response, UIViewController currentController) -> Bool。如果令牌有效,则只返回true,如果没有,则返回false并处理导航至LoginViewController,并在登录后返回currentController。此NavigationController可以是MyAppDelegate的属性,可以是单身,每次需要时创建,也可以将其传递给您显示的每个UIViewController