Facebook连接通过JavaScript无法关闭并且未传递会话ID

3 投票
4 回答
967 浏览
提问于 2025-04-15 22:02

我正在尝试通过 Facebook Connect 来验证用户,使用的是一个自定义的 Javascript 按钮:

<form>
<input type="button" value="Connect with Facebook" onclick="window.open('http://www.facebook.com/login.php?api_key=XXXXX&extern=1&fbconnect=1&req_perms=publish_stream,email&return_session=0&v=1.0&next=http%3A%2F%2Fwww.example.com%2Fxd_receiver.htm&fb_connect=1&cancel_url=http%3A%2F%2Fwww.example.com%2Fregister%2Fcancel', '_blank', 'top=442,width=480,height=460,resizable=yes', true)" onlogin='window.location="/register/step2"' />
</form>

我已经能够成功验证用户了。不过,在验证之后,弹出的窗口一直保持打开状态,主窗口并没有跳转到其他地方。实际上,弹出的窗口却跳转到了 "/register/step2"。

我该如何让登录窗口按预期关闭,并把 Facebook 的会话 ID 传递到 /register/step2 呢?

谢谢!

4 个回答

0

其实呢,你需要自己通过编程来关闭弹出窗口,并重新加载主窗口。

这里有一个详细的教程,可以一步一步教你怎么做。

0

你的Facebook应用设置是否已经配置为重定向回一个支持Django的URL?比如,在我的URL配置中,我有:

url(r'^facebook/setup/$', facebook_complete_reg, name="facebook_setup"),

‘facebook_complete_reg’这个视图看起来有点像django-facebookconnect中的‘setup’视图。我会用那个文件来确保你的“从Facebook返回”的视图执行正确的操作。

最后,确保你的模板加载了正确的JavaScript。在我的主模板中,我加载了以下内容:

{% load facebook_tags %}
{% facebook_js %}
{% initialize_facebook_connect %}

这样你就可以使用模板标签‘show_connect_button’,我想你就是在这么做。

我能想到的唯一其他可能性是,你可能在使用一个JavaScript拦截器或者类似的浏览器插件。你能贴一些代码吗?

Ryan

1

看起来你可能在用旧版的JavaScript开发工具包(SDK),虽然你的代码示例有点让人困惑,但从onlogin这个处理函数来看,我觉得你是在用某个SDK。建议你换成新版的JavaScript SDK。然后使用XFBML和<fb:login-button>

<fb:login-button perms="read_stream"></fb:login-button>

这样会让你的工作轻松很多,而且大部分复杂的事情都能帮你搞定。

撰写回答