如何在用facebook登录时在弹出框中打开Facebook登录表单

问题描述:

我在我的web应用程序中使用Facebook登录。我正在使用omniauth宝石。我想在新的弹出窗口中打开登录到Facebook表单。我怎样才能做到这一点?请帮忙。如何在用facebook登录时在弹出框中打开Facebook登录表单

我假设你有一般的OmniAuth工作,并且只关心如何在新窗口中进行操作。如果你还没有设置OmniAuth,那么关于它的一个很棒的RailsCast here

OmniAuth在弹出框中不应该有任何问题。首先,就包括target='_blank'您的登录页面上,就像这样:

<%= link_to "Log in with Facebook", "/auth/facebook", :target => '_blank' %> 

这应该载入Facebook的授权页面在一个新的窗口,你应该能够在整个OAuth的过程中获得。然而,一旦你完成了OAuth,你将需要渲染一个包含一些javascript的模板来处理页面的关闭。这里的模式,我们遵循:

<script language='javascript'> 
    if (opener.authenticationSuccessful) { 
    opener.authenticationSuccessful(); 
    } else { 
    opener.location.href = "<%= root_path %>"; // your 'login path' 
    } 
    window.close(); 
</script> 

这非常适用于我们,因为它使我们可以覆盖逐页的基础页面上的默认行为(去根登录页面)(例如,如果有人只添加一个认证到现有的会话),但默认情况下,将做你所期望的没有任何额外的工作。