Искал вокруг Google и StackOverflow, все имеют практически одинаковые советы, чтобы сделать:FB.login порождает новое окно и не может получить доступ токенов
FB.login(function(response) {
if (response.authResponse) {
var accessToken = response.authResponse.accessToken;
}
});
У меня есть «доля» кнопку на странице, и когда щелкните Я просто хочу сделать сообщение в профиле пользователя и собираюсь использовать вызов https://graph.facebook.com/me/feed, чтобы сделать это. Для того, чтобы быть в состоянии сделать это, мне нужно access_token от Facebook, так что я сделал:
(после вызова FB.init(), а также добавление all.js)
FB.login(function (response) {
console.log('response.authResponse: ' + response.authResponse);
if (response.authResponse) {
var access_token = FB.getAuthResponse()['accessToken'];
console.log('Access Token = ' + access_token);
FB.api('/me', function (response) {
console.log('Good to see you, ' + response.name + '.');
});
} else {
console.log('User cancelled login or did not fully authorize.');
}
}, { scope: 'user_about_me' });
Я ожидают, что он откроет диалоговое окно входа для пользователя в facebook, как только они войдут в систему, диалог закрывается, он возвращается на мою страницу, и я получаю токен доступа.
Но происходит то, что он открывает новое окно браузера в facebook с диалогом входа в систему, после входа пользователя в систему страница переходит на страницу новостей пользователя, и мой обратный вызов выше никогда не вызывается. Таким образом, в основном управление уходит и переносится в новое окно браузера как обычный просмотр в facebook для пользователя. Однако, когда я закрываю это новое окно, он запускает «User cancel login» в моем протоколе.
Что мне здесь не хватает? Все ресурсы просто предлагают вызвать FB.login, и это то, что я уже делаю, но я не могу получить токен доступа для пользователя.
Заранее благодарен!
EDIT: Полный код и больше комментариев
<script type="text/javascript" language="javascript">
window.fbAsyncInit = function()
{
FB.init(
{
appId: '<%= this.ApplicationId %>', // App ID
channelURL: '<%= this.ChannelFileUrl %>', // Channel File
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
});
// Additional initialization code here
};
// Load the SDK Asynchronously
(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/<%= this.LocaleCode %>/all.js";
d.getElementsByTagName('head')[0].appendChild(js);
} (document));
</script>
, а затем в некоторых JS-файл, вызывающий эту функцию (параметры не используются, потому что еще не на самом деле сделать пост)
function postToFacebook(name, caption, description, link, picture, id) {
var accessToken = "";
console.log('fb event subscribe');
FB.Event.subscribe('auth.login', function() {
console.log('facebook event auth.login');
});
console.log('fb login');
FB.login(function (response) {
console.log('response.authResponse: ' + response.authResponse);
if (response.authResponse) {
var access_token = FB.getAuthResponse()['accessToken'];
console.log('Access Token = ' + access_token);
} else {
console.log('User cancelled login or did not fully authorize.');
}
}, {});
}
и последовательность того, что произойдет это:
- распечатаны «событие фб подписаться»
- распечатаны «фб Войти»
- код попадает FB.login -> открывает новое окно браузера на Facebook, после того, как пользователь Логин фокус остается в этом новом окне, он никогда не идет в функцию обратного вызова в FB.login
- Если я закрою окно, порожденное на шаге 3 выше, тогда вызывается функция обратного вызова и «Пользователь отменен логин или не полностью авторизуется». печатается («response.authResponse:» дает нуль)
Шаг 1 и 2, как ожидается, шаг 3 является проблемой, а также окно, которое откроется имеет URL https://www.facebook.com/home.php?_rdr
Я следовал примеры по этой ссылке, а также - но они также используют FB. login() - так что все равно откроется новая страница. Единственный способ напрямую ударить uraut-url и не использовать js SDK? Когда я пытаюсь ударить по URL-адресу oauth, я получаю сообщение «Ошибка произошел, пожалуйста, попробуйте еще раз позже», не объяснив, что пошло не так. –
Что именно вы подразумеваете под «прямым ударом uraut-url»? Кроме того, вы используете устаревшую кнопку «share»? –
не используя кнопку совместного доступа из виджета fb, я ударил oauth, как при создании запроса GET или запроса JSONP на https://www.facebook.com/dialog/oauth? –