为什么WebView的行为与Safari不同(私密浏览)?

时间:2015-10-26 20:47:13

标签: macos cocoa redirect cookies webview

我正在尝试通过在我的OS X应用程序中打开Web视图来登录Instagram并在我的OS X应用程序中批准我的应用程序。我已尝试使用彼此独立的私密浏览删除所有Cookie 。我不会拦截请求/回复。首先,当我尝试打开auth URL时,我在我的应用程序和Safari中都获得了以下(和正确的)页面:

enter image description here

然而,当我输入我的用户名和密码时,如果Safari,我的Instagram帐户打开,则会正确地重定向到应用程序,例如它登录。当我在我的应用程序中输入我的(显然,相同的)凭据并单击登录时,我将在大约10次的重定向循环中转回到同一屏幕:

https://instagram.com/accounts/login/?force_classic_login=&next=/oauth/authorize/%3Fclient_id%3DMY_CLIENT_ID_REMOVED_FOR_SECURITY%26redirect_uri%3Dhttp%3A//my.redirect.url.removed.for.security%26response_type%3Dcode

如果我尝试在Safari中访问该URL,我会进入登录界面(如果没有登录),之后我会被重定向到正确的URL。

我已尝试输入无效凭据,我收到了其他错误,因此用户名/密码不正确:

enter image description here

它看起来像一个cookie /重定向问题。我已经删除了所有代表,以防万一他们正在拦截登录机制,但无济于事。

为什么我无法在Cocoa网页浏览器上登录Instagram,而我可以在Safari中使用?我使用的是最新的OS X 10.11.1和Safari 9.0.1。

1 个答案:

答案 0 :(得分:0)

这显然是Instagram自己的cookie的错误,需要在应用程序的cookie容器内部重置,我忘了清除(我清除了Safari的,但它与应用程序的容器不同)

我在应用启动时添加了清除Cookie的选项:

NSHTTPCookieStorage *jar = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray *cookies = jar.cookies;
for (NSHTTPCookie *cookie in cookies) {
    [jar deleteCookie:cookie];
}

我调用了这段代码,问题就消失了。