令牌已保存但无法绕过登录页面

时间:2013-12-01 09:47:29

标签: ios objective-c singleton afnetworking

如果此人已有令牌,我正试图绕过登录页面欢迎页面。我正在使用基本身份验证和afnetworking来进行api调用。一旦用户记录了用户名和密码,我就会根据信息获得64并获得一个令牌。我将令牌保存在一个nsobject类中,我在其中创建一个令牌单例,并在一个简单的登录方法中检查用户是否有令牌。但由于某种原因,我总是看到登录页面(意味着它跳过我的条件方法)。如果任何人都可以指出我犯错误的地方,那就太好了。

这是我创建登录单例

的类

CredentialStore.h

#import <Foundation/Foundation.h>
#import "LoginInfo.h"
@interface CredentialStore : NSObject
-(BOOL)isLoggedIn;
@property (nonatomic) LoginInfo *loginInfo;
+(id)sharedStore;
@end

CredentialStore.m

#import "CredentialStore.h"

static CredentialStore *sharedInsance;

@implementation CredentialStore

+(id)sharedStore
{
    if (!sharedInsance) {
        sharedInsance = [[CredentialStore alloc] init];
    }
    return sharedInsance;
}

- (BOOL)isLoggedIn {
    return (self.loginInfo.authToken != nil);
}
@end

这是我的authenticationapimanager类

AuthAPIManager.h

#import "AFHTTPSessionManager.h"
@interface AuthAPIManager : AFHTTPSessionManager
+ (id)sharedManager;
@end

AuthAPIManager.m

#import "AuthAPIManager.h"
#import "CredentialStore.h"

#define BASE_URL @"http://Url"
#define Base_Proxy @"http://Url"

static AuthAPIManager *sharedManager;

@implementation AuthAPIManager

//Setup the singleton to use throught the life of the application

+(id)sharedManager
{
    if (!sharedManager) {
        sharedManager = [[AuthAPIManager alloc] initWithBaseURL:[NSURL URLWithString:Base_Proxy]];
    }
    return sharedManager;
}
-(id)initWithBaseURL:(NSURL *)url
{
    self = [super initWithBaseURL:url];
    if (self) {
    }
    return self;
}
@end

这是我保存登录信息的类

LoginInfo.h

#import <Foundation/Foundation.h>
@interface LoginInfo : NSObject
@property(nonatomic,copy)NSNumber *AccountId;
@property(nonatomic,copy)NSString *DeviceType;
@property(nonatomic,copy)NSString *HardwareId;
@property(nonatomic,copy)NSString *NickName;
@property(nonatomic,copy)NSString *authToken;
-(id)initWithDictionary:(NSDictionary *)dictionary;
@end

LoginInfo.m

#import "LoginInfo.h"
@implementation LoginInfo
-(id)initWithDictionary:(NSDictionary *)dictionary
{
    self =[super init];
    if (self) {
        self.AccountId = [dictionary objectForKey:@"AccountId"];
        self.DeviceType = [dictionary objectForKey:@"DeviceType"];
        self.HardwareId = [dictionary objectForKey:@"HardwareId"];
        self.NickName = [dictionary objectForKey:@"NickName"];
    }
    return self;
}

在我的视图控制器中,在viewwillappearmethod中,我检查用户是否有令牌,但这是我遇到问题的部分

LoginViewController.m

@interface LoginViewController ()
@property (nonatomic,strong) CredentialStore *credentialStore;
@end
implementation LoginViewController

#pragma mark - UIViewController
-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self checkIfThePersonLoggedIn];
}
-(void)checkIfThePersonLoggedIn
{
    CredentialStore *credStore = [CredentialStore sharedStore];

//    //check to see if the use has the token already
    if (credStore.loginInfo.authToken != nil) {
        [self.loginButton setHidden:YES];
        [self performSegueWithIdentifier:@"welcomeViewSegue" sender:self];
    }
    else [self.loginButton setHidden:NO];
    NSLog(@"checkForToken - loginviewcontroller");
}

在我的getTokenRequest中,这是我在成功的情况下保存令牌的方式

 NSString *authToken = [responseObject objectForKey:@"Token"];
        CredentialStore *credStore = [CredentialStore sharedStore];
        LoginInfo * loginInfo = credStore.loginInfo;
        loginInfo.authToken = authToken;
        NSLog(@"this is the token here %@",authToken);
        [self performSegueWithIdentifier:@"welcomeViewSegue" sender:self];

我很感激帮助。

这是我实例化登录信息的地方

- (IBAction)login:(id)sender
{
    [_usernameTextField resignFirstResponder];
    [SVProgressHUD show];
    id LoginParams =@{
                 @"NickName" : self.usernameTextField.text,
                 @"password" :_StoreIdentifierForVendor,
                 @"DeviceType" :_DeviceModel
                 };
    [[AuthAPIManager sharedManager]POST:@"/url" parameters:LoginParams success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"response: %@", responseObject);

        LoginInfo *loginInfo = [[LoginInfo alloc] initWithDictionary:responseObject];
        CredentialStore *credStore = [CredentialStore sharedStore];
        credStore.loginInfo = loginInfo;
        [self getToken];

    }failure....

0 个答案:

没有答案