我搬到了omniauth-facebook,它工作得非常好。我一直在尝试使用弹出窗口登录按钮,但我无法让它工作。
我按照https://github.com/mkdynamic/omniauth-facebook/blob/master/example/config.ru上的示例查看了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>
它几乎可以正常工作:单击链接将显示弹出窗口并进行身份验证,但是当弹出窗口关闭时,我仍然在登录页面上,即使我可以在日志中看到目标页面已处理,如果我点击客人和会员都可以使用的链接,我将获得会员版本,这是登录工作的另一个证据。
那么,即使登录成功,为什么浏览器不会被重定向?我应该在用户登录的控制器方法中修改某些内容(比如使用特殊格式的“respond_to”)吗?
由于
答案 0 :(得分:0)
当用户通过FB.login
登录时,对话框关闭,用户返回主窗口,并调用回调。
在你的回调中你执行$.get('/auth/facebook/callback');
,这是一个ajax调用。
重定向在哪里?
答案 1 :(得分:0)
在初始化程序中将:authorize_params => { :display => 'popup' }
添加到facebook的提供商信息中。