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];
}
上一篇下一篇

猜你喜欢

热点阅读