Привет, я использую неофициальный fb Coldfusion SDK Мне пришлось преобразовать все из использования CFscript в обычные функции, потому что я все еще на CF7.
Кажется, все работает, но я не уверен, почему при поиске cookie при входе в систему на стороне сервера он не найден. Кажется, это хорошо для Chorme, но FF, IE и Opera имеют одну и ту же проблему.
В index.cfm у меня есть кнопка fb: login, при нажатии вы получаете экран входа в систему, после успешного входа в систему, index.cfm при обновлении запускает мои методы FacebookApp, но возвращает пустое значение для access_token при чтении со стороны сервера. Это потому, что на стороне сервера я пытаюсь получить информацию из куки, но куки не были созданы. Я также вывел значение access_token, но оно возвращается пустым. Когда я нажимаю F5 примерно через секунду, теперь я вижу значение для моего access_token в моем выводе. В то же время, если я использую предупреждение js для отображения access_token в getLoginStatus, я могу увидеть значение.
Я читал в некоторых местах для старых браузеров, где SDK медленно загружается, чтобы использовать параметр channelURL, который я сделал, но я все еще получаю тот же результат, что и выше.
Любые предложения, что я могу сделать? Я попытался добавить тайм-аут js, чтобы замедлить getLoginStatus, чтобы у него было время прочитать cookie, но у меня не было никакой радости. Пожалуйста, помогите.
К началу страницы у меня есть это
<!doctype html PUBLIC "-//W3C//Dtd html 4.0 Transitional//EN">
<html xmlns:og="http://ogp.me/ns#" xmlns:fb="http://www.facebook.com/2008/fbml">
После тега body у меня есть следующее
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : 'xxxxxxxxxxxxxxxx',
cookie : true, // enable cookies to allow the server to access the session
oauth : true, // OAuth 2.0
status : true, // check login status
xfbml : true, // parse XFBML
channelUrl: document.location.protocol + './/www.sitename.com/fbchannel.html' //custom channel
});
// whenever the user logs in or logs out, we refresh the page
FB.Event.subscribe('auth.login', function(response) {
window.location.reload();
alert('login');
});
FB.Event.subscribe('auth.logout', function(response) {
window.location.reload();
//alert('logout');
});
FB.getLoginStatus(function(response) {
if (response.status == 'connected') {
// the user is logged in and connected to your
// app, and response.authResponse supplies
// the user's ID, a valid access token, a signed
// request, and the time the access token
// and signed request each expire
var uid = response.authResponse.userID;
var accessToken = response.authResponse.accessToken;
//alert('end');
// alert('login url called '+unescape(window.location.pathname));
// whenever the user logs in we refresh the page
//alert(accessToken);
} else if (response.status == 'not_authorized') {
// the user is logged in to Facebook,
//but not connected to the app
} else {
// the user isn't even logged in to Facebook.
}
});
};
(function() {
var e = document.createElement('script');
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
e.async = true;
document.getElementById('fb-root').appendChild(e);
}());
</script>
Где-то намного ниже, у меня есть кнопка
<fb:login-button scope="publish_stream,email" autologoutlink="true">Connect with FB</fb:login-button>