iOS AFOAuth2Manager使用心得
github地址: https://github.com/AFNetworking/AFOAuth2Manager
这个库,不多说,实现OAuth 2.0授权访问。
确实可以减轻很大的负担,而且使用很容易。
完成 OAuth 2.0授权认证 大概就这几步:
1.按照后台给的参数,向服务器请求token等数据。
2.存储返回的数据,并记录token过期的时间,用于后续步骤判定token是否过期。(如果是拿到便开始使用,可以省略存储这一步)
3.按照后台给的格式,将token写入Request的Header里的Authorization。
4.每次请求数据时,都用这个已经在header写入了token的Request。
5.后续使用中,随时判定token有效期。若token过期时,马上获取新的token,再写入Authorization。
下面是我使用的大致步骤(仅供参考):
NSURL *baseURL = [NSURL URLWithString:@"http://xxx.xxx.x.x:xxxx"];
AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:baseURL]; [manager POST:@"/OAuth/token"
parameters:@{@"client_id":@"xxx",
@"client_secret":@"xxx",
@"grant_type":@"xxx",
}
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"\n=============accessToken=================\n\n%@\n\n",responseObject); //! 存储credential,内含access_token
AFOAuthCredential *credential = [[AFOAuthCredential alloc]initWithOAuthToken:[responseObject objectForKey:@"access_token"]
tokenType:[responseObject objectForKey:@"token_type"]];
[credential setExpiration:[responseObject objectForKey:@"expires_in"]]; //! 记录token过期时间,这里的token有效时间为1800s
_tokenInvalidateTime = [NSDate dateWithTimeIntervalSinceNow:]; //! 设置需要在Headers中加入的参数Authorization,_opManager为另一个AFHTTPRequestOperationManager,因为我这个例子里,二者使用的baseURL不同
_opManager.requestSerializer = [AFHTTPRequestSerializer serializer];
[_opManager.requestSerializer setAuthorizationHeaderFieldWithCredential:credential];
//! 我这里并没有用作者提供的方法,将credential写入文件,
//! 因为我是直接将Authorization的设置放在了这里完成
//! 如果,我没有用到这_opManager
//! 这里我就应该用[AFOAuthCredential storeCredential:credential withIdentifier:serviceProviderIdentifier];
//! 这个方法将credential写入文件,
//! 之后用AFOAuthCredential *credential =
//![AFOAuthCredential retrieveCredentialWithIdentifier:serviceProviderIdentifier];
//! 方法在其他地方重新获取这个credential。credential里就还有token等信息
}
failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"\nAccessToken获取失败: %@", error);
}];
iOS AFOAuth2Manager使用心得的更多相关文章
- 【原】使用Bmob作为iOS后台开发心得——云端代码添加其他User的Relation关系
本文转载请注明出处 —— polobymulberry-博客园 问题描述 我在User表中增加了两个列,分别为“我关注的人”(Relation关系)和“我的粉丝”(Relation关系)当我关注某个人 ...
- 【原】使用Bmob作为iOS后台开发心得——查询关联关系(BmobRelation)
本文转载请注明出处 —— polobymulberry-博客园 简介 Bmob中的数据关联分为Pointer和Relation两种(数据关联在我开发app过程中使用还是很频繁的,也算个难点.虽然之前没 ...
- ios 内存管理 心得
- alloc, copy, retain会把引用计数+1 - release会把引用计数-1 - 局部变量如果初始化时不是autorelease的,要及时调用release释放,并且赋值为nil否则 ...
- 【转】Xcode中的iOS模拟器(iOS Simulator)的介绍和使用心得
iOS模拟器简介 iOS功能简介 iOS模拟器,是在Mac下面开发程序时,开发iOS平台的程序时候,可以使用的辅助工具. 其功能是,帮你模拟iOS平台设备,在模拟器上运行对应的程序,以方便你没有实体设 ...
- 【整理】Xcode中的iOS模拟器(iOS Simulator)的介绍和使用心得
[整理]Xcode中的iOS模拟器(iOS Simulator)的介绍和使用心得 iOS模拟器简介 iOS功能简介 iOS模拟器,是在Mac下面开发程序时,开发iOS平台的程序时候,可以使用的辅助工具 ...
- IOS开发经验分享
一些IOS开发的心得: 1) [Multiple Threads] IOS多线程注意, 所有的UI操作都必须在主线程上: Any code that will update the UI should ...
- iOS 开发者计划申请 2014 年最新心得[转]
iOS 开发者计划申请 2014 年最新心得 http://myfairland.net/ios-developer-program/
- ios中关于delegate(委托)的使用心得
ios中关于delegate(委托)的使用心得 分类: iOS开发2012-05-15 10:54 34793人阅读 评论(9) 收藏 举报 iosuiviewtimerinterfaceprinti ...
- iOS学习心得——UITableViewCell的复用
UITableView是在iOS开发中最常用的控件之一.我的第一篇学习心得献给它了 UITableView是由一行一行的UITableViewCell构成的. 首先想这 ...
随机推荐
- PL/SQL 将旧表的一些字段赋值给新的表中的字段的做法
INSERT INTO 新表(字段1,字段2,.......) SELECT 字段1,字段2,...... FROM 旧表
- pycloudtag 标签云
原创,转载请标明 QQ:231469242 # -*- coding: utf-8 -*- """Python3.0 Created on Sat Nov 26 08:5 ...
- 分享一个.NET实现的简单高效WEB压力测试工具
在Linux下对Web进行压力测试的小工具有很多,比较出名的有AB.虽然AB可以运行在windows下,但对于想简单界面操作的朋友有点不太习惯.其实vs.net也提供压力测试功能但显然显得太重了,在测 ...
- thinkphp标签
1.volist标签 随后一条不一样的输出<volist name="pagehead" id="vo"> <if condition=&qu ...
- css清楚浮动的方法
- 深入理解javascript原型和闭包(12)——简介【作用域】
提到作用域,有一句话大家(有js开发经验者)可能比较熟悉:“javascript没有块级作用域”.所谓“块”,就是大括号“{}”中间的语句.例如if语句: 再比如for语句: 所以,我们在编写代码的时 ...
- 读取70开头的xml,gbk转成utf-8
//读取70开头的xml,gbk转成utf-8 //InputStream is = new FileInputStream(super.getFile());//文件读取 //InputStream ...
- PHP array 操作函数
array_map 函数的介绍 将数组的每个单元使用回调函数格式: array_map(callback, array) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...
- __new__方法
__new__:创建对象时调用,返回当前对象的一个实例__init__:创建完对象后调用,对当前对象的实例的一些初始化,无返回值 案例一: >>> class A(object): ...
- php,nginx重启
查看php运行目录命令:which php/usr/bin/php 查看php-fpm进程数:ps aux | grep -c php-fpm 查看运行内存/usr/bin/php -i|grep ...