2015-04-03 35 views
0

我使用ASIHTTPRequest登录到我的应用程序并创建了一个布尔方法登录和多数民众工作的伟大:ASIHTTPRequest登录方法和重用creds

-(BOOL)User:(NSString *)user password:(NSString *)password 
{ 
    NSURL *url = [NSURL URLWithString:url]; 
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
    [request setUseSessionPersistence:YES]; 
    [request setUseKeychainPersistence:NO]; 
    [request setUsername:user]; 
    [request setPassword:password]; 
    [request setDomain:domain]; 
    [request startSynchronous]; 

    NSError *loginError = [request error]; 
    if(loginError == nil){ 
     return true; 
    }else{ 
     return false; 
    } 

} 

,但现在我想用这个方法外,这些creds 。我阅读文档,看来我可以通过使用这些creds:

//Should reuse our username and password 
request = [ASIHTTPRequest requestWithURL:url]; 

但会抛出一个错误,因为请求将不会被定义。我将如何做到这一点?

+0

'ASIHTTP'已经drepecated并不再支持2012年以来有关这项工作的领导者是从34年'AFNetworking '。 – 2015-04-05 22:10:19

回答

1

仅在该方法中变量request的有效范围。您还应该在方法的外部定义新变量。

象下面这样:

//Should reuse our username and password 
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
0

由于the documentation says

如果useSessionPersistence被打开(这是默认设置),在内存ASIHTTPRequest商店凭据,可以重新使用他们的后续请求。

这意味着您的凭据(如果您使用的是代理服务器和sessionProxyCredentialsStore)存储在sessionCredentialsStore。除非您覆盖它们,否则它们将自动应用于所有后续请求。这两个变量都是全局变量static

因此,只要正常发出请求,并且只要您不修改凭据存储,凭据就会应用于下一个请求。

0

我不是很清楚你在问什么,但据我了解你的关注是在请求被解雇后提取用户凭证。那是对的吗?

我认为这样做的理想方式是永远不要放弃请求(或简单地使用Keychain缓存)。所以基本上把这个request变量作为特定对象(可能是处理登录任务的单例管理器类型类)的实例变量(ivar)。例如

// LoginManager.h 

@import Foundation; 

@interface LoginManager : NSObject 

@property (nonatomic, readonly, strong) ASIHTTPRequest *request; 

@end 

// LoginManager.m 


#import "LoginManager.h" 

@interface LoginManager() 

@property (nonatomic, readwrite, strong) ASIHTTPRequest *request; 

@end 

@implementation LoginManager 

+ (instancetype)sharedManager 
{ 
    static LoginManager *sharedInstance = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     sharedInstance = [[self alloc] init]; 
    }); 
    return sharedInstance; 
} 

-(BOOL)User:(NSString *)user password:(NSString *)password 
{ 
    NSURL *url = [NSURL URLWithString:url]; 
    self.request = [ASIHTTPRequest requestWithURL:url]; 
    [self.request setUseSessionPersistence:YES]; 
    [self.request setUseKeychainPersistence:NO]; 
    [self.request setUsername:user]; 
    [self.request setPassword:password]; 
    [self.request setDomain:domain]; 
    [self.request startSynchronous]; 

    NSError *loginError = [request error]; 
    if(loginError == nil) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

@end 

通过访问它:

ASIHTTPRequest *request = [[LoginManager sharedManager] request] 

NSLog(@"%@", request.username); 
NSLog(@"%@", request.password);