Ruby on rails 3 Omniauth facebook:登录弹出窗口未重定向

Ruby on rails 3 Omniauth facebook:登录弹出窗口未重定向,ruby-on-rails-3,facebook,omniauth,Ruby On Rails 3,Facebook,Omniauth,我搬到了omniauth facebook,它工作得非常好。我一直在尝试使用弹出窗口的登录按钮,但我无法让它工作 我遵循了rails应用程序的示例 <div id="fb-root"></div> <script type="text/javascript"> window.fbAsyncInit = function() { FB.init({ appId : '#{ENV['APP_ID']}',

我搬到了omniauth facebook,它工作得非常好。我一直在尝试使用弹出窗口的登录按钮,但我无法让它工作

我遵循了rails应用程序的示例

<div id="fb-root"></div>

    <script type="text/javascript">
      window.fbAsyncInit = function() {
        FB.init({
          appId  : '#{ENV['APP_ID']}',
          status : true, // check login status
          cookie : true, // enable cookies to allow the server to access the session
          oauth  : true, // enable OAuth 2.0
          xfbml  : true  // parse XFBML
        });
      };

      (function(d) {
        var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
        js = d.createElement('script'); js.id = id; js.async = true;
        js.src = "//connect.facebook.net/en_US/all.js";
        d.getElementsByTagName('head')[0].appendChild(js);
      }(document));

      $(function() {
        $('a').click(function(e) {
          e.preventDefault();

          FB.login(function(response) {
            if (response.authResponse) {
              $.get('/auth/facebook/callback');
            }
          }, { scope: '#{SCOPE}' });
        });
      });
    </script>

    <p>
      <a href="#">Connect to FB</a>
    </p>

window.fbAsyninit=函数(){
FB.init({
appId:“#{ENV['APP_ID']}”,
状态:true,//检查登录状态
cookie:true,//启用cookie以允许服务器访问会话
oauth:true,//启用oauth 2.0
xfbml:true//解析xfbml
});
};
(职能(d){
var js,id='facebook jssdk';if(d.getElementById(id)){return;}
js=d.createElement('script');js.id=id;js.async=true;
js.src=“//connect.facebook.net/en_US/all.js”;
d、 getElementsByTagName('head')[0].appendChild(js);
}(文件);
$(函数(){
$('a')。单击(函数(e){
e、 预防默认值();
FB.登录(功能(响应){
if(response.authResponse){
$.get('/auth/facebook/callback');
}
},{scope:'{scope}}});
});
});

它几乎可以正常工作:点击链接将显示弹出窗口,我将获得认证,但当弹出窗口关闭时,我仍保留在登录页面上,即使我可以在日志中看到目标页面已被处理,如果我点击一个对来宾和会员都可用的链接,我将获得会员版本,登录成功的另一个证明

那么,为什么即使登录成功,浏览器也没有重定向?我是否应该在控制器方法中修改一些让用户登录的内容(比如使用特殊格式的“respond_to”)


感谢

当用户通过
FB.login登录时,对话框关闭,用户返回主窗口,并调用回调

在回调中执行
$.get('/auth/facebook/callback'),这是一个ajax调用


重定向在哪里?

添加
:授权\u参数=>{:display=>'popup'}
到初始值设定项中的facebook的提供者信息。

重定向在/auth/facebook/callback(UserSessionController#使用\u提供者创建\u)调用的控制器方法中。这是一个ajax请求,它本身不会更改页面,它实际上很奇怪,因为你没有用它做任何事情。我想我应该用一个带有format.js的respond_to和一个重定向来做一些事情,但它没有被调用,当我跟踪发生的事情时,它会通过format.html。或者我应该呈现一个重新加载页面的rjs视图吗?通常会添加以下代码:
FB.Event.subscribe('auth.login',function(response){window.location.reload();})。如果您只想在登录时重新加载,您不需要任何ajax,只需重新加载即可——但是,很明显,我对您的代码的了解非常有限,将“$.get('/auth/facebook/callback');”替换为“window.location='/auth/facebook/callback';”起到了作用,但随后我尝试在另一个浏览器中使用该登录方法获得了“无效凭据”,而一个普通的按钮会让我登录。还尝试添加FB.Event.subscribe,但从未触发。