如何在基于选项卡的应用程序中检查用户机密?

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) // 用户正在登录显示视图

否则 // 发布通知

【讨论】:

谢谢,但是否有一个中心位置来执行此检查,而不是在每个选项卡控制器中调用检查逻辑?

以上是关于如何在基于选项卡的应用程序中检查用户机密?的主要内容,如果未能解决你的问题,请参考以下文章

当我在基于选项卡的应用程序中从一个控制器导航到另一个控制器时,tabBar 被隐藏

如何在应用启动时加载其他选项卡的视图?

更改基于选项卡的应用程序上的选项卡会向下推 UI 元素

将图像和标题添加到基于选项卡的应用程序的导航栏

基于 Ionic 4 选项卡的应用程序中的多个侧边菜单

如何打开专注于服务选项卡的Apple Maps? (网址方案)