2017.3.7
2017-03-07 本文已影响11人
AaronYin
第一个坑,登录。
GitHub上有相同类型的客户端,MVVMReactiveCocoa
和Monkey
。
昨天做了登录功能。登录可以采用OAuth2.0登录方式和用户名密码两种方式。Monkey只采用了第一种,MVVMReactiveCocoa两种都实现了。
我采用了第二种方式,用户名密码的方式,这样可以自定义一个漂亮的登录界面。很快,第一个坑出现了。
当一个新用户,第一次登录时,可以获取到token,这时就生成了一份authorization,这时再次登录时,token就不再返回了。这就郁闷了。可以想象这样一个场景,当一个新用户下载登录APP,然后用了一段时间,由于某些原因暂时卸载了,后来再重新安装时,再次登录就获取不到token了。
现在通过这个CocoaPods安装的OctoKit是0.5版本,MVVMReactiveCocoa中的版本较早。对比一下两个版本登录接口的实现,早期GitHub给出的方案是,登录一次后,再次登录时先删除原来的authorization,再重新登录。感觉这个方案还是欠妥当,所以GitHub在后续版本中去掉了。不过这不就是把这个难题抛给了客户端的开发人员吗?当然也可能是我对文档不太熟悉,可能已经有了解决办法,不过为了保证产品的快速开发,暂时先采用这个方案。
不过经过测试,这个方案也暗藏了一个坑(�也可能是我文档读的不够仔细,读英文文档,真想骂娘)。调用删除接口需要带上登录信息,否则会报401错误。
于是扩展了OCTClient,添加了一个新方法
-(RACSignal *)revokeAsUser:(NSString *)userName password:(NSString *)pwd objectID:(NSString *)objectID {
if (self.user == nil) return [RACSignal error:self.class.userRequiredError];
[self setAuthorizationHeaderWithUsername:userName password:pwd];
NSString *path = [NSString stringWithFormat:@"authorizations/%@", objectID];
NSMutableURLRequest *request = [self requestWithMethod:@"DELETE" path:path parameters:nil];
// request.cachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
return [self enqueueRequest:request resultClass:nil];
}