2017.3.7

作者: AaronYin | 来源:发表于2017-03-07 09:41 被阅读11次

    第一个坑,登录。

    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];
    }
    

    相关文章

      网友评论

          本文标题:2017.3.7

          本文链接:https://www.haomeiwen.com/subject/tiipgttx.html