建议在appDelegate iOS中保存用户名密码

时间:2013-12-11 14:27:59

标签: ios passwords appdelegate

我不想在密钥库中保存登录详细信息并让它们保持不变。  我想在使用应用程序时保存用户名密码,并在每次启动应用程序时让用户登录。 (为了使其安全)。 我打算将username_password保存在AppDelegate类的对象中,从而使用登录凭据在应用程序中进行Web服务调用。这是可取的吗?或者我应该在控制器对象上传递用户名密码吗?

我假设应用程序委托对象死亡,当应用程序关闭或被杀死时,它的所有变量都不会被保存。

3 个答案:

答案 0 :(得分:1)

首先:您是否只想保存用户的一个密码/用户?或者你想保存几个密码/用户?

第二:服务器是什么?您是否要调用Web服务来检索并保存密码/用户?

第三次:出于安全原因,永远不要在NSUserDefault中保存密码/用户。

  

Keychain 是保存密码的最佳方式。如果你想使用一些持久性,那么你需要使用一些哈希来加密密码   值。

查看本教程中的哈希和钥匙串信息:

Basic Security in iOS part 1

Basic Security in iOS part 2

答案 1 :(得分:0)

除非您将它们保存到NSUserDefaults或CoreData之类的持久性中,否则您将丢失在每个应用程序启动时在AppDelegate中设置的任何变量。

答案 2 :(得分:0)

首先,出于安全原因,您不得将该信息存储在NSUserDefaults中(这是此类情况的最佳选择)。

如果您想在每次进入应用程序时插入用户名和密码,您有两个选项:

1 - 在AppDelegate中创建两个变量 2 - 创建一个全局类来存储信息

我个人建议创建一个全局类。

例如:假设您的班级名为“全球”。在你.h:

#import <Foundation/Foundation.h>

@interface GlobalValues : NSObject

@property (strong, nonatomic) NSString *username;
@property (strong, nonatomic) NSString *password;

@end

在“Global”.m文件中,您必须创建一个实例,以保持信息的持久性。然后你初始化:

#import "GlobalValues.h"
#import "L0ViewController.h"

@implementation GlobalValues

@synthesize username;
@synthesize password;

GlobalValues *globalV = nil;

+ (GlobalValues *)getInstanceOfGlobalValues
{
    if (globalV == nil)
    {
        globalV = [[GlobalValues alloc] init];

        globalV.username = 0;
        globalV.password = 0;
    }

    return globalV;
}

要获取信息,只需调用方法:

GlobalValues *global = [GlobalValues getInstanceOfGlobalValues];
NSString  *pass = global.password;

此致