Ruby on rails 3 Omniauth facebook:登录弹出窗口未重定向
我搬到了omniauth facebook,它工作得非常好。我一直在尝试使用弹出窗口的登录按钮,但我无法让它工作 我遵循了rails应用程序的示例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']}',
<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,但从未触发。