登陸功能的代碼實現
進入App時簡單的登錄註冊界面:
當app界面加載時,如果網絡正常,需要向服務器發送請求(ViewDidLoad時就要向服務器發請求),服務器返回相應的參數,這些參數在之後的登陸請求中會用到,相關代碼如下:
//請求參數
AFHTTPSessionManager * man = [AFHTTPSessionManager manager];
//發送GET請求
[man GET:CANSHU_URL parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) {
NSLog(@"請求成功 %@ %@",responseObject,responseObject[@"result"]);
dic = responseObject[@"result"];
//base解密
_pwd = [AESCrypt decrypt:dic[@"keycode"]];
NSLog(@"%@",_pwd);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"請求失敗 %@",error);
}];
請求成功後,服務器會返回json數據,如下所示:
注:keycode是一個重要參數,被稱爲臨時密鑰,用來加密其他重要參數,如用戶名和密碼,此時返回的“keycode”是加密狀態,需要base64解密後才能用作加密其他參數。
然後點擊登陸按鈕(假設已經有註冊好的用戶名和密碼),向服務器發送登陸請求,代碼如下:
//加密用戶名和密碼
NSString * encryptionStr1 = [AESCrypt encrypt:_numberTextField.text password:_pwd];
NSString * encryptionStr2 = [AESCrypt encrypt:_passTextField.text password:_pwd];
NSDictionary * pDic = [NSDictionary dictionaryWithObjectsAndKeys:dic[@"keycode"],@"keycode", encryptionStr1,@"telno",encryptionStr2,@"password", nil];
AFHTTPRequestOperationManager * man = [AFHTTPRequestOperationManager manager];
man.responseSerializer = [AFHTTPResponseSerializer serializer];
//發送POST請求
[man POST:DENGLU_URL parameters:pDic constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
//JSON解析
NSDictionary * allInDic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
NSLog(@"\nSource : %@\nresponse:%@",allDic[@"result"],allDic[@"response"]);
if ([allInDic[@"status"] intValue] == 1) {
NSDictionary * dict = allInDic[@"result"];
AppDelegate * app = [AppDelegate sharedAppDelegate];
app.keycode = allInDic[@"response"];
[[NSUserDefaults standardUserDefaults] setObject:dict[@"uid"] forKey:@"uid"];
[[NSUserDefaults standardUserDefaults] synchronize];
//base64解密
NSString * pass = [AESCrypt decrypt:dic[@"keycode"]];
[[NSUserDefaults standardUserDefaults] setObject:pass forKey:@"keycode"];
[[NSUserDefaults standardUserDefaults] synchronize];
//添加蒙板和菊花
[self createCoverBtn];
[self createActivityIndicatorView];
self.timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerAction:) userInfo:nil repeats:YES];
}else{
UIAlertView* alter=[[UIAlertView alloc]initWithTitle:@"很抱歉" message:@"親,你輸入的賬號或者密碼有誤" delegate:nil cancelButtonTitle:@"我看一下" otherButtonTitles:@"重新輸入", nil];
[alter show];
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
}];
運行模擬器,點擊登陸按鈕,服務器會返回相應的json數據,如下:
以上是登陸成功纔會返回的數據