我正在开发一个OS X应用程序,用户可以在其中连接到不同外部服务(在OAuth中)的帐户。 为此,我需要在Webview中打开我的API页面(一个Rails应用程序),它将用户重定向到要连接的服务。在流程结束时,用户将再次在我的API上重定向,这将告诉他连接是否正常工作。
因此,用户需要在外部服务网站上的OAuth流程之前和之后对我的API进行身份验证。 当我打开Webview时,由于访问令牌作为URL的参数,用户被验证,并且重定向到外部服务工作正常。 但很多时候,当用户在连接后被重定向到我的API时,他不再被认证(但有时它可以工作)。
当我通过
检查我的应用的现有Cookie时[[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:]
我的API有一个会话cookie:
<NSHTTPCookie version:0 name:"_..._api_session" value:... expiresDate:(null) created:2014-02-12 19:16:00 +0000 (4.13925e+08) sessionOnly:TRUE domain:... path:"/" isSecure:FALSE>
仅仅保持用户身份验证似乎不够。
这可以来自哪里? 它似乎与Webview有关,因为当我通过将用户发送到外部浏览器来完成整个过程时,它可以正常工作。 Webview是否有特定的方式来处理会话cookie?
我不知道我是否足够具体,请询问您是否需要其他详细信息。
答案 0 :(得分:0)
我终于找到了问题所在。
我的应用通过永久同步流程与我的API通信,需要使用access_token进行身份验证。我使用AFNetworking,在应用容器中创建会话cookie。
当我在Webview中再次进行身份验证时,它还会创建一个cookie会话。不知何故,cookie发生了冲突并破坏了会话。
我刚刚告诉AFNetworking不要使用cookie来避免这种情况,并且它有效。