使用ReactiveCocoa进行身份validation

我正在ReactiveCocoa和Octokit.objC(github库)之上构build一个应用程序。 作为我努力的一部分,我使用Octokits ReactiveCocoa信号来访问需要authentication的资源。 上一个问题“ 使用ReactiveCocoa重试asynchronous操作 ”在覆盖用户希望“重试asynchronous操作” 一次的情况下做得很好。 我想弄清楚如何处理你可能要重试几次的情况

在我的具体情况下,如果身份validation失败,我想去问用户的凭据。 我会要求用户提供他们的证书几次(2或3),然后停止,如果他们失败了,或者我会继续问他们的凭据,直到他们成功。

任何帮助,将不胜感激。 谢谢 – AYAL

有一个名为-retry:的操作符-retry:它接受一个count参数。 如果您将此运算符应用于某个信号,并且该信号返回错误,则在收到错误时,它将重新预订信号(达到指定的次数)。 所以你需要的是一个信号,当订阅时,提示用户input凭证。

 @weakify(self); RACSignal *requestCredentials = [RACSignal defer:^{ @strongify(self); // (Prompt the user for credentials.) if (successful) { self.cachedCredentials = credentials; return [self authenticate:credentials]; } else { return [RACSignal error:[[MyError alloc] init]]; } }]; // We try to authenticate using the cached credentials (the // `-authenticate:` method returns a signal that attempts // authentication when it is subscribed to). If the initial // attempt to authenticate fails, we try 3 times to get the // user to enter the correct credentials. return [[self authenticate:self.cachedCredentials] catchTo:[requestCredentials retry:3]];