这是我第一次尝试使用 facebook 应用程序和 OpenGraph。我在developers.facebook.com 上遵循了这个例子。到目前为止,一切都很好。
我想做的是: 单击某个图像时,请检查用户是否已登录并已对您的应用程序进行身份验证。我希望用户能够在不经过身份验证的情况下使用该页面。只有一项特定操作(单击该图像)需要用户进行身份验证。
- 如果用户已登录并已对您的应用进行身份验证,则在用户的流上发布一条消息。
- 如果用户未登录和/或未对您的应用进行身份验证,则在用户单击图像时显示身份验证对话框。接受后,在用户的信息流上发布消息。
<a onclick="fb_login();" href="#" class="productlink1"><img id="product1" onclick="postCook()" alt="" src="img/fressko_heart_black.png"/></a> <a class="productlink2"><img id="product2" alt="" src="img/fressko_checked_black.png"/></a>
我知道这不是最终的代码,特别是因为它有两个 onclick="" 会同时触发。所以,我需要一个不同的解决方案。
发布在用户提要上的 JavaScript 函数如下所示:
function postCook()
{
FB.api(
'/me/xxxxxx:cook',
'post',
{ recipe: 'http://www.zzzzzzz.com/test/' },
function(response) {
if (!response || response.error) {
alert('Error occured');
} else {
alert('Cook was successful! Action ID: ' + response.id);
}
});
}
验证用户的 JavaScript 如下所示:
window.fbAsyncInit = function() {
FB.init({
appId : 'xxxxxx',
oauth : true,
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});};
function fb_login(){
FB.login(function(response) {
if (response.authResponse) {
console.log('Welcome! Fetching your information.... ');
//console.log(response); // dump complete info
access_token = response.authResponse.accessToken; //get access token
user_id = response.authResponse.userID; //get FB UID
FB.api('/me', function(response) {
user_email = response.email; //get user email
// you can store this data into your database
});
} else {
//user hit cancel button
console.log('User cancelled login or did not fully authorize.');
}
}, {
scope: 'publish_stream'
});
}(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);}());
有人对我的问题有什么好的解决方案吗?或者朝正确的方向踢。我通常更喜欢使用 PHP,但对于这个任务,JavaScript 似乎是首选的武器。
问候,