我通过JavaScript SDK使用Graph API,就像这样(这是直接从文档中获取的基本示例):
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#login').click(function() {
FB.login(function(response) {
if (response.authResponse) {
console.log('Welcome! Fetching your information.... ');
FB.api('/me', function(response) {
console.log('Good to see you, ' + response.name + '.');
});
} else {
console.log('User cancelled login or did not fully authorize.');
}
});
})
})
</script>
</head>
<body>
Hellow!
<a href="#" id="login">Login</a>
<div id="fb-root"></div>
<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>
window.fbAsyncInit = function() {
FB.init({
appId: '249274258430595',
cookie: true,
status: true,
xfbml: true,
oauth: true
});
};
</script>
</body>
</html>
也可以在这里进行实时测试:
http://bitcells.com我需要后端访问API (fbs_249274258430595)的cookie没有被设置。
只有fbsr_249274258430595存在,这不是我需要的。我用Firebug的FireCookie扩展进行了测试。
我真的不明白为什么这个基本的例子不能正常工作-这意味着我想从后端代码(PHP, Ruby等)使用API。
任何想法?
另一方面,我最终设置了自己的cookie,服务器端可以读取:
我有一个复选框,询问用户是否想在fb上分享,下面是代码:
function setFbCookies(response) {
Cookie.set('fb_access_token', response.authResponse.accessToken, {path: '/'})
Cookie.set('fb_user_id', response.authResponse.userID, {path: '/'})
}
when('#share_on_fb', function(checkbox) {
checkbox.observe('change', function(ev) {
if(checkbox.getValue()) {
FB.getLoginStatus(function(response) {
if (response.authResponse) {
setFbCookies(response)
} else {
FB.login(function(response) {
if (response.authResponse) {
setFbCookies(response)
} else {
checkbox.checked = false
}
}, {scope: 'publish_stream'});
}
})
}
})
})
下面是为什么fbs_xxxxx cookie没有被设置的原因:https://developers.facebook.com/blog/post/525/
如果您使用oath=false,那么它确实会被设置,但这只在10月1日之前有效。关于如何从新的fbsr_xxxxxx cookie中获得加密的访问令牌,仍然没有文档。