使用applicationDidBecomeActive检查用户是否已登录

时间:2017-02-14 17:58:18

标签: ios objective-c security

我的应用程序有一个"主屏幕"使用登录和注册选项。当用户完成上述之一时,数据存储在共享实例中。现在出于安全原因,我正在考虑使用applicationDidBecomeActive定期检查以确保用户在服务器上仍处于活动状态,或者通过调用共享实例中的方法来阻止用户。如果用户未处于活动状态,则应用会通过提示将其踢到主屏幕。

然而,我的问题是当第一次加载app时,调用了applicationDidBecomeActive,并且由于用户未登录,最终会出现循环。

处理此问题的正确方法是什么?理想情况下,我想使用applicationDidBecomeActive,但我只想在应用程序的帐户部分执行检查。

任何帮助都会很棒。

感谢。

3 个答案:

答案 0 :(得分:0)

有几种实现方法。

方法1:使用$file = $request->file('file1'); $accepts = ['jpeg', 'png', 'pdf']; $ext = $file->getClientOriginalExtension(); $filename = $file->getClientOriginalName(); if( !in_array($ext, $accepts) ) { return view('your-view')->withErrors('Invalid File Format'); } else { //File has one of the correct extensions, //return the filename to the view so it can be //re-displayed in the input return view('your-view', ['filename' => $filename]); } 触发通知并在Accounts-ViewController中实现一个侦听器。

方式2:在你的AppDelegate中,获取活动的ViewController(取决于你正在使用的rootViewController)以及该ViewController是否具有类型NotificationCenter.default触发公共函数。

方式3:在另一个对象中组合或使用Way1和Way2,并以您喜欢的方式通知您的ViewController。

还有更多。 发布一些代码以获得更具体的帮助:)

答案 1 :(得分:0)

您可以使用以下任一方法来解决此问题。

方法1

- (void)checkWhetherAppIsActive {

     UIApplicationState appState = [[UIApplication sharedApplication] applicationState];
     if (appState == UIApplicationStateActive) {

     }else if (appState == UIApplicationStateInactive) {

     }else if (appState == UIApplicationStateBackground) {

     }
}

方法2

[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationWillResignActiveNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {

}];

[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationWillEnterForegroundNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {

}];

[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationWillTerminateNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {

}];

答案 2 :(得分:0)

当用户登录时,生成expiryTimeStamp。只要应用处于有效状态,您就可以查看currentTimestampexpiryTimeStamp。如果currentTimestampexpiryTimeStamp之前,则将其视为有效会话!

- (void)applicationDidBecomeActive:(UIApplication *)application {
    //compare current NSDate with expiryDate
    if(current date is before expiry date){
         //active session
      }else{
     //log out the user
    }
}

您可以生成有效期:

-(void)generateExpiryTimeStamp{
    [[NSUserDefaults standardUserDefaults]setObject:[NSDate dateWithTimeIntervalSinceNow:900] forKey:@"tokenExpiry"];  //Expiry date Set to 15mins
    [[NSUserDefaults standardUserDefaults]synchronize];
}