OSChina_IOS版客户端笔记(五)_账号登录验证以及账号加密保存

原创 2013年12月02日 16:27:26

OSChina中账号登录用的是ASIHTTPRequest,而不是后面使用的AFNetworking。关于为什么不使用同一个类库,我网上查了下(原文地址:http://www.infoq.com/cn/articles/afn_vs_asi)

AFN适合逻辑简单的应用,或者更适合开发资源尚不丰富的团队,因为AFN的易用性要比ASI好很多,而这样的应用(或团队)对底层网络控件的定制化要求也非常低。ASI更适合已经发展了一段时间的应用,或者开发资源相对丰富的团队,因为往往这些团队(或他们的应用)已经积累了一定的经验,无论是产品上还是技术上的。需求复杂度就是在这种时候高起来,而且底层订制的需求也越来越多,此时AFN就很难满足需求,需要牺牲一定的易用性,使用ASI作为网络底层控件。SegmentFault开源客户端现在被设计为一款简单的阅读客户端,几乎没有定制要求,因此,目前我选择了AFN作为网络控件。

先不管ASI和AFN的的区别了,现在先来看看我们怎么验证账号吧,这里新建一个项目LoginVerify。新建一个LoginViewController,有:

#import "LoginViewController.h"
#import "ASIHTTPRequest.h"
#import "ApiError.h"

#import "Tool.h"
#import "NewsTableController.h"
@interface LoginViewController ()

@end

@implementation LoginViewController
@synthesize userName;
@synthesize passWord;
@synthesize loginBtn;

NSString *name,*pwd;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    [loginBtn addTarget:self action:@selector(login) forControlEvents:UIControlEventTouchUpInside];
}

-(void)login {
    name = self.userName.text;
    pwd = self.passWord.text;
    //判断用户名、密码是否为空
    if([name length] == 0 ||
       [pwd length] == 0) {
        UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"提示" message:@"密码或用户名不能为空" delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
        [alertView show];
    } else {
        //1.提交数据到服务器
        request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"https://www.oschina.net/action/api/login_validate"]];
        [request setUseCookiePersistence:YES];
        [request setPostValue:name forKey:@"username"];
        [request setPostValue:pwd forKey:@"pwd"];
        [request setPostValue:@"1" forKey:@"keep_login"];
        [request setDelegate:self];
        [request setDidFailSelector:@selector(requestFailed:)];
        [request setDidFinishSelector:@selector(requestLogin:)];
        [request startAsynchronous];

    }
}

- (void)requestFailed:(ASIHTTPRequest *)request{     NSLog(@"登录验证失败");
}

- (void)requestLogin:(ASIHTTPRequest *)request{ //登录验证成功
    ApiError *error = [Tool getApiError2:request.responseString];
    //根据ApiError来决定处理流程
    switch (error.errorCode) {
            
        case 1: //用户名、密码正确
        {
            //持久化用户名、密码
            [[[Tool alloc]init]saveUserNameAndPwd:name andPwd:pwd];
            //跳转界面
            NewsTableController *newsTableController = [[NewsTableController alloc]initWithNibName:@"NewsTableController" bundle:nil];
            [self presentViewController:newsTableController animated:YES completion:nil];
            break;
        }
            
        case 0: //提示错误信息
        case -1:
        {
            UIAlertView *alertView =
            [[UIAlertView alloc]initWithTitle:@"错误" message:error.errorMessage delegate:self cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
            [alertView show];
            break;
        }
    }
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

以上代码的逻辑应该算是简单的,将用户名、密码作为ASIFromDataRequest:requestWithURL方法的参数,想服务器发送请求。服务器会返回一个ASIHTTPRequest对象,这个ASIHTTPRequest对象会包含与登录相关的xml数据。解析它,然后根据解析得到的信息,决定是提示异常还是跳转界面。

除此之外,还需要注意账号信息的安全,如果使用UserDefault对账号信息进行保存,则需要对数据进行加密处理。这里使用AES算法加密

程序运行效果:




上面的工程项目只是简单的从OSChina中抽取代码,导入了AES加密、XML解析部分代码。本来想写一个评论列表的,后来发现如果添加这个评论列表的话,设计到的东西太多了。只怕会弄得很乱,就作罢了,,就先这样吧。

工程地址:http://download.csdn.net/detail/u011638883/6644339

O啦~~~

转载请保留出处:http://blog.csdn.net/u011638883/article/details/17068801

谢谢!!


相关文章推荐

OSChina_IOS版客户端笔记(三)_列表数据加载

列表数据加载,主要由上拉加载更多和下拉在线更新组成。 上拉加载更多,这个还是比较简单的,就是判断服务器数据是否已经加载完成了,如果是的话列表最后一项显示"已加载全部数据",否则显示一个"加载更多"的按...

OSChina_IOS版客户端笔记(四)_程序数据、缓存的管理

程序的数据缓存问题。首先常见的程序数据可以分为以下几种: · 列表、表格等在线请求的动态数据 · 图片数据,可以是列表中在线请求的 · 用户信息、程序设置、程序版本信息等 列表数据的缓存: 观察OSC...

手机验证码登录,账号登录结合

本项目基于腾讯外包框架(wei框架) 地址:https://github.com/twinh/wei/tree/master/docs/zh-CN#weiHTML页面: 【基...

知乎账号登录+验证码

#! /user/bin/env python #encoding=utf-8 __author__ = 'chw' import re # from urllib import parse, req...

iphone开发我的新浪微博客户端-用户登录账号添加篇(1.5)

本篇将在上一篇的基础上完成账号的添加的功能,这个功能都相对比较简单看上(图4),点击添加按钮的时候出现一个弹出对话框,这个对话框的实现我们已经在前面的(iphone开发我的新浪微博客户端-用户登录自定...
  • mkhgg
  • mkhgg
  • 2011年08月31日 17:03
  • 550

iphone开发我的新浪微博客户端-用户登录账号删除篇(1.6)

在上一篇中我们完成账号的添加的功能,本篇就实现账号删除的功能,完成的具体效果看上(图5),当点击删除按钮的时候出现一个弹出对话框显示是否删除当前默认选择的用户,这个显示功能跟上一篇的添加几乎没有什么区...
  • mkhgg
  • mkhgg
  • 2011年08月31日 17:04
  • 623

微信多账号登录软件

  • 2013年11月11日 23:22
  • 22.12MB
  • 下载

MSN多账号登录

  • 2012年02月19日 22:43
  • 180KB
  • 下载

淘宝账号基于OAuth2.0的登录验证授权登陆第三方网站

首先得有一个注册的appkey和App Secret   该流程分三个步骤: 第一步:通过用户授权获取授权码Code; 第二步:用上一步获取的Code和应用密钥(AppSecret)通过H...

OSChina iOS客户端工程

  • 2013年11月23日 10:29
  • 2.24MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OSChina_IOS版客户端笔记(五)_账号登录验证以及账号加密保存
举报原因:
原因补充:

(最多只允许输入30个字)