如果此人已有令牌,我正试图绕过登录页面欢迎页面。我正在使用基本身份验证和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....