Facebook连接通过JavaScript无法关闭并且未传递会话ID
我正在尝试通过 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>
这样会让你的工作轻松很多,而且大部分复杂的事情都能帮你搞定。