2015-04-03 39 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);