当我单击我的 FB 登录按钮时,会弹出 FB 身份验证对话框。在我输入我的 FB 凭据后,对话框会重定向到这样的 url:
https://www.facebook.com/dialog/permissions.request?wholeBunchOfQueryParameters
或者,如果我已经登录 FB,弹出对话框是:
https://www.facebook.com/dialog/oauth?wholeBunchOfQueryParameters
但那些是保持打开状态的空白对话框。一旦我关闭对话框,回调就会发生,但直到那时才会发生。这是 IE 和 Chrome 上的行为。
我确实有这个工作正常,我认为当我有一台新电脑时它停止工作,所以它可能是环境问题。我认为从那时起它就起作用了,但也许没有。我恢复到我的代码版本,它正在工作,它也不再工作,因此进一步表明它是环境的,但我不知道它可能是什么。我可能会在杂草中离开。
另外,还有一点信息,我正在本地开发,所以我使用的是 localhost:port。我对这个问题进行了大量研究,确实看到有人说使用 127.0.0.1 而不是 localhost 所以我也尝试过,但没有任何区别。
知道为什么对话框不会关闭吗?
<fb:login-button perms="email,user_checkins" onlogin="afterFacebookConnect();"
autologoutlink="false" ></fb:login-button>
<div id="fb-root" style="display:inline; margin-left:20px;"></div>
<script language="javascript" type="text/javascript">
window.fbAsyncInit = function () {
FB.init({ appId: 'myAppId',
status: true, cookie: false, xfbml: true
});
};
function afterFacebookConnect() {
FB.getLoginStatus(function (response) {
alert("Hi");
var access_token = FB.getAuthResponse()['accessToken'];
if (response.authResponse) {
window.location = "../Account/FacebookLogin?token=" +
access_token;
} else {
alert(FB.getAuthResponse);
}
});
};
function logout() {
FB.getLoginStatus(function (response) {
var access_token = FB.getAuthResponse()['accessToken'];
if (response.authResponse) {
window.location = "../Account/Logout";
} else {
// user clicked Cancel
}
});
};
$(document).ready(function () {
if (document.getElementById('fb-root') != undefined) {
var e = document.createElement('script');
e.type = 'text/javascript';
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
e.async = true;
document.getElementById('fb-root').appendChild(e);
}
});
</script>