使用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]];