#javascript #facebook #facebook-graph-api #oauth-2.0 #facebook-authentication
#javascript #Facebook #facebook-graph-api #oauth-2.0 #facebook-аутентификация
Вопрос:
Я пробую этот пример http://thinkdiff.net/facebook/new-javascript-sdk-oauth-2-0-based-fbconnect-tutorial /
Но я получаю xml-ошибку, в которой говорится, что в разрешении отказано.
Я также изменил идентификатор приложения. Я немного смущен новым пользовательским интерфейсом developers.facebook.com Меня вполне устраивал старый пользовательский интерфейс.
Я не уверен, где я не упоминаю свой URL обратного вызова.
Пожалуйста, помогите мне.
<div id="fb-root"></div>
<script type="text/javascript">
var button;
var userInfo;
window.fbAsyncInit = function() {
FB.init({ appId: '273713715982249', //change the appId to your appId
status: true,
cookie: true,
xfbml: true,
});
showLoader(true);
function updateButton(response) {
button = document.getElementById('fb-auth');
userInfo = document.getElementById('user-info');
if (response.authResponse) {
//user is already logged in and connected
FB.api('/me', function(info) {
login(response, info);
});
button.onclick = function() {
FB.logout(function(response) {
logout(response);
});
};
} else {
//user is not connected to your app or logged out
button.innerHTML = 'Login';
button.onclick = function() {
showLoader(true);
FB.login(function(response) {
if (response.authResponse) {
FB.api('/me', function(info) {
login(response, info);
});
} else {
//user cancelled login or did not grant authorization
showLoader(false);
}
}, {scope:'email,user_birthday,status_update,publish_stream,user_about_me'});
}
}
}
// run once with current status and whenever the status changes
FB.getLoginStatus(updateButton);
FB.Event.subscribe('auth.statusChange', updateButton);
};
(function() {
var e = document.createElement('script'); e.async = true;
e.src = document.location.protocol
'//connect.facebook.net/en_US/all.js';
document.getElementById('fb-root').appendChild(e);
}());
function login(response, info){
if (response.authResponse) {
var accessToken = response.authResponse.accessToken;
userInfo.innerHTML = '<img src="https://graph.facebook.com/' info.id '/picture">' info.name
"<br /> Your Access Token: " accessToken;
button.innerHTML = 'Logout';
showLoader(false);
document.getElementById('other').style.display = "block";
}
}
function logout(response){
userInfo.innerHTML = "";
document.getElementById('debug').innerHTML = "";
document.getElementById('other').style.display = "none";
showLoader(false);
}
//stream publish method
function streamPublish(name, description, hrefTitle, hrefLink, userPrompt){
showLoader(true);
FB.ui(
{
method: 'stream.publish',
message: '',
attachment: {
name: name,
caption: '',
description: (description),
href: hrefLink
},
action_links: [
{ text: hrefTitle, href: hrefLink }
],
user_prompt_message: userPrompt
},
function(response) {
showLoader(false);
});
}
function showStream(){
FB.api('/me', function(response) {
//console.log(response.id);
streamPublish(response.name, 'I like the articles of Thinkdiff.net', 'hrefTitle', 'http://thinkdiff.net', "Share thinkdiff.net");
});
}
function share(){
showLoader(true);
var share = {
method: 'stream.share',
u: 'http://thinkdiff.net/'
};
FB.ui(share, function(response) {
showLoader(false);
console.log(response);
});
}
function graphStreamPublish(){
showLoader(true);
FB.api('/me/feed', 'post',
{
message : "I love thinkdiff.net for facebook app development tutorials",
link : 'http://ithinkdiff.net',
picture : 'http://thinkdiff.net/iphone/lucky7_ios.jpg',
name : 'iOS Apps amp; Games',
description : 'Checkout iOS apps and games from iThinkdiff.net. I found some of them are just awesome!'
},
function(response) {
showLoader(false);
if (!response || response.error) {
alert('Error occured');
} else {
alert('Post ID: ' response.id);
}
});
}
function fqlQuery(){
showLoader(true);
FB.api('/me', function(response) {
showLoader(false);
//http://developers.facebook.com/docs/reference/fql/user/
var query = FB.Data.query('select name, profile_url, sex, pic_small from user where uid={0}', response.id);
query.wait(function(rows) {
document.getElementById('debug').innerHTML =
'FQL Information: ' "<br />"
'Your name: ' rows[0].name "<br />"
'Your Sex: ' (rows[0].sex!= undefined ? rows[0].sex : "") "<br />"
'Your Profile: ' "<a href='" rows[0].profile_url "'>" rows[0].profile_url "</a>" "<br />"
'<img src="' rows[0].pic_small '" alt="" />' "<br />";
});
});
}
function setStatus(){
showLoader(true);
status1 = document.getElementById('status').value;
FB.api(
{
method: 'status.set',
status: status1
},
function(response) {
if (response == 0){
alert('Your facebook status not updated. Give Status Update Permission.');
}
else{
alert('Your facebook status updated');
}
showLoader(false);
}
);
}
function showLoader(status){
if (status)
document.getElementById('loader').style.display = 'block';
else
document.getElementById('loader').style.display = 'none';
}
Это код, который я использую, я не для входа в систему, но я не получаю информацию о пользователе.
Комментарии:
1. Можете ли вы опубликовать точную ошибку? И ссылка на живой пример или хотя бы какой-нибудь код?
2. @Abby: s3.amazonaws.com/foofysfacebookapp/facebook.html вот пример ссылки
3. @Abby вот исходный код github.com/mahmudahsan /…
4. Когда вы получаете сообщение об ошибке? Не видя работающего кода или не зная, когда / где возникает ошибка, ее сложно отлаживать
Ответ №1:
Facebook внедрил функцию диалога авторизации на странице настроек приложения Facebook. Теперь вам не нужно писать код для получения пользовательских разрешений. Вы можете сделать это, настроив правильные значения в настройках приложения. получить более подробную информацию можно на http://iforapple.org/?p=436
Ответ №2:
function fblogin() {
FB.login(function(response) {
if(response.session amp;amp; response.perms){
FB.api('/me', function(response) {
});
}
}, {perms:''});//set the permissions
}
</script>
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : '',//giv ur app id
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
};
(function() {
var e = document.createElement('script');
e.src = 'https://connect.facebook.net/en_US/all.js';
e.async = true;
document.getElementById('fb-root').appendChild(e);
}());
</script>
Комментарии:
1. Этот код не будет работать завтра! Вам нужно использовать oauth: true в вашем init и response.authResponse вместо сеанса!
2. Теперь я могу войти в систему, но он вообще не отображает информацию о пользователе и не выдает никаких ошибок как таковых.
3. @Pooja: даже после использования кода, который вы предоставили, я просто могу войти в систему, но он не отображает информацию о пользователе pooja: (
4. FB.api(‘/me’, функция (ответ) { оповещение (ответ.email); });
5. Этот код сбивает с толку, существует изолированный </script>, который также выдает синтаксическую ошибку