簡(jiǎn)單登錄邏輯Demo

結(jié)合MD5加密的方式,簡(jiǎn)單介紹一下登錄保存賬號(hào)密碼的邏輯
前言:
1."NSString+Hash.h"是一個(gè)MD5加密的分類
2.這里使用了Apache搭建了一個(gè)簡(jiǎn)單的本地服務(wù)器來進(jìn)行演示
3.使用NSURLConnection演示發(fā)送登錄請(qǐng)求,請(qǐng)求字段匹配(userId.intValue == 1),代表登錄成功,此時(shí)將真確的賬號(hào)密碼保存至偏好設(shè)置
4.首次登錄,對(duì)密碼進(jìn)行一次MD5加密,將加密后的密碼發(fā)送至服務(wù)器
5.設(shè)置一個(gè)標(biāo)識(shí)用于判斷是否為首次登錄,首次登錄對(duì)密碼進(jìn)行加密
6.iOS7后蘋果加入了鑰匙串的功能,這里將信息保存至沙盒演示

#import "ViewController.h"
#import "NSString+Hash.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UITextField *tf_username;
@property (weak, nonatomic) IBOutlet UITextField *tf_password;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    //從沙盒獲取用戶名和密碼
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    
    NSString *username = [defaults objectForKey:@"username"];
    NSString *password = [defaults objectForKey:@"password"];
    
    //給控件賦值
    self.tf_username.text = username;
    self.tf_password.text = password;
    
}
- (IBAction)loginBtnClick:(id)sender {
    
    //獲取用戶名和密碼
    NSString *username = self.tf_username.text;
    NSString *password = self.tf_password.text;
    
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSNumber *flag = [defaults objectForKey:@"flag"];
    //如果是第一次
    if (!flag.boolValue) {
        password = [password md5String];
        //更改標(biāo)識(shí)
        [defaults setObject:@YES forKey:@"flag"];
        [defaults synchronize];
    }

    //1. URL
    NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/login.php"];
    
    //2. 根據(jù)URL創(chuàng)建請(qǐng)求
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    //設(shè)置請(qǐng)求體的數(shù)據(jù)
    NSString *string = [NSString stringWithFormat:@"username=%@&password=%@",username,password] ;
    //設(shè)置請(qǐng)求體
    request.HTTPBody = [string dataUsingEncoding:NSUTF8StringEncoding];
    //設(shè)置請(qǐng)求方法
    request.HTTPMethod = @"POST";
    
    //3.建立連接發(fā)送請(qǐng)求
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {

        if (connectionError != nil || data == nil) {
            NSLog(@"請(qǐng)求失敗");
        }

        //數(shù)據(jù)解析/反序列化
        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
        
        NSNumber *userId = [dict objectForKey:@"userId"];
        
        //判斷是否登錄成功
        if (userId.intValue == 1) {
            //保存用戶名
            [defaults setObject:username forKey:@"username"];
            [defaults setObject:password forKey:@"password"];
            
            //同步一下, iOS8以后不需要調(diào)用,系統(tǒng)會(huì)自動(dòng)調(diào)用
            [defaults synchronize];
            
        }
        
        NSLog(@"%@",dict);
    }];

}

@end
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文中所有代碼演示均有GitHub源碼,點(diǎn)擊下載 普通加密方法是講密碼進(jìn)行加密后保存到用戶偏好設(shè)置中 鑰匙串是以明...
    si1ence閱讀 40,603評(píng)論 20 197
  • 1. 網(wǎng)絡(luò)基礎(chǔ)TCP/IP HTTP基于TCP/IP協(xié)議族,HTTP屬于它內(nèi)部的一個(gè)子集。 把互聯(lián)網(wǎng)相關(guān)聯(lián)的協(xié)議集...
    yozosann閱讀 3,600評(píng)論 0 20
  • /*--------------------------- 01 HTTP請(qǐng)求 -----------------...
    藍(lán)心兒的藍(lán)色之旅閱讀 2,220評(píng)論 0 4
  • 一、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,726評(píng)論 6 152
  • 1.過去的榮譽(yù)并不代表現(xiàn)在你還優(yōu)秀 2.專家是有自己思維的人 3.說好以正面相爭(zhēng),卻被使陰招。這個(gè)世界多數(shù)時(shí)候并不...
    Eric小風(fēng)閱讀 103評(píng)論 0 0

友情鏈接更多精彩內(nèi)容