如何通过打开新窗口执行OAuth请求,而不是从当前页面重定向用户?

Hoà*_*ong 31 javascript twitter facebook popup

我已经使用Twitter和Facebook进行了OAuth身份验证.目前,对于每个站点,我的服务器将用户重定向到指定的URL(例如,使用Twitter的http://api.twitter.com/oauth/authorize),然后通过回调URL接收身份验证参数.

但通过这种方式,用户被重定向到我的页面(到Facebook或Twitter),并且只有在输入正确的用户名和密码后才会返回.这就像http://techcrunch.com在用户尝试推文发布时的方式.

我记得在某个网站上,我看到我们可以通过重定向用户来连接,但是打开一个弹出窗口供用户输入凭据.认证为completde后,弹出窗口关闭,主页面刷新新内容.

使用javascript这可能是一个非常简单的任务,但我仍然无法弄明白.我可以在弹出窗口中打开身份验证URL,但是如何获取结果并更新主页?

WTK*_*WTK 53

假设您在弹出窗口中打开身份验证URL window.open(),您可以使用以下命令访问父窗口:

window.opener
Run Code Online (Sandbox Code Playgroud)

重新加载父窗口(从弹出窗口)使用:

window.opener.location.reload();
Run Code Online (Sandbox Code Playgroud)

此代码应在您已设置为oauth授权的成功回调网址的网址上提供.

一般来说,流程应该是:

  • 打开带有授权页面的弹出窗口(例如在twitter.com上)
  • 成功授权后,twitter会将用户重定向到您提供的URL(它会在同一个弹出窗口中打开)
  • 开启窗口重新加载(通过window.opener.location.reload())
  • 关闭弹出窗口本身(使用javascript是你想要的)

  • 是的,在弹出窗口中,是一个成功回调oauth授权的页面.所以流程是:你打开一个带有授权页面的弹出窗口(例如在twitter.com上),成功授权后,twitter会将用户重定向到你给出的url(它会在同一个弹出窗口中打开),回调页面你从我的答案中输入了一个javascript,*opener*窗口被重新加载,你也可以使用javascript关闭弹出窗口. (6认同)