如何在基于选项卡的应用程序中检查用户机密?
Posted
技术标签:
【中文标题】如何在基于选项卡的应用程序中检查用户机密?【英文标题】:How to check user confidencial in a tab based application? 【发布时间】:2012-03-31 13:34:30 【问题描述】:我正在构建一个基于标签的 iPhone 应用程序,每个标签中的所有信息都是与用户相关的,这意味着用户必须先登录才能进入每个标签。我将用户名/密码输入放在第一个选项卡中,成功登录后我会将用户机密存储在钥匙链中。但是,在用户输入其他选项卡之前检查它的最佳方法是什么?并防止未经授权的用户进入除登录选项卡以外的其他选项卡?我不想在每个视图控制器中都进行此验证。
【问题讨论】:
+1 用于使用钥匙串获取用户凭据。 【参考方案1】:这可以使用UITabBarControllerDelegate
来完成。
实施它,例如在您的 UIApplication
委托中并将其分配给您的 UITabBarController
。
AppDelegate 标头:
@interface AppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate>
//[...]
//[...]
@end
AppDelegate 实现:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
//[...]
//instanciate and configure your tabbarcontroller
//[...]
//assign this instance as the delegate of our tabbarcontroller
tabBarController.delegate = self;
每当用户选择任何选项卡时,都会调用以下方法。返回 NO 意味着选择实际上不应该发生。例如,在这种情况下,您可以显示一条提醒用户先登录的警报。
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
//is the user logged in and did the user select any but the first tab?
if (!userLoggedIn &&
[tabBarController.viewControllers indexOfObject:viewController] != 0)
//nope->...
//force the user to the first tab
tabBarController.selectedIndex = 0;
//prevent the originally chosen tab selection
return NO;
//user is logged in, it is safe to select the chosen tab
return YES;
【讨论】:
谢谢,还有一个问题,一旦验证失败,我可以强制用户转到第一个标签吗?【参考方案2】:您可以在 Singleton 类中使用方法(如在应用程序委托中)。在每个选项卡中,您都可以检查用户是否像
一样登录如果(appdelegate.userLogine) // 用户正在登录显示视图
否则 // 发布通知
【讨论】:
谢谢,但是否有一个中心位置来执行此检查,而不是在每个选项卡控制器中调用检查逻辑?以上是关于如何在基于选项卡的应用程序中检查用户机密?的主要内容,如果未能解决你的问题,请参考以下文章