2012-03-07 57 views
0

我已经开始开发一个有facebook集成的网站,它在使用Javascript SDK时似乎可以正常工作。我显示用户名称和个人资料图片很好。然后我在各处阅读使用JS进行身份验证连接的最佳方法,并使用PHP SDK以更简单的方式运行API。我使用哪个Facebook登录按钮,为什么?

所以我面临着使用两种不同的登录方法之一,但对于我的生活,我不能只是得到我想要的东西。它看起来好像文档没有清楚地解释他们描述的任何事情的利弊,以及什么情况最适合于什么方法。

例如:

<?php if (!$user) { ?> 
    <div class="fb-login-button" data-perms="email,user_birthday">Login with Facebook</div> 
<?php } else { ?> 

    Your user profile is 
    <pre> 
    <?php //print htmlspecialchars(print_r($user_profile, true)) ?> 
    </pre> 

    <?php echo $user_profile['name']; ?> 

    <?php 
    $data = array("message" => "Hello Woghfd!"); 
    $status = $facebook->api("/me/feed", "POST", $data); 
    //echo $user; 

    ?> 
<?php } 

但后来也有其他的按钮:

<fb:login-button scope="email,user_about_me">Connect Facebooks</fb:login-button> 

然后调用JS的功能的FB.login。

我不会介意这一点,但我测试使用PHP SDK张贴到用户的墙与此代码的能力:

$status = $facebook->api("/me/feed", "POST", $data); 

,我不断收到错误消息:

致命错误:未捕获的OAuthException:(#200)用户未授权应用程序执行此操作

这是我访问我的网站时。然后,当我注销并使用我的网站登录按钮重新登录时,它可以正常工作。我明显不想让每个访问该网站的用户都发生这种情况。

有人可以请解释所有这些按钮是什么意思?我花了几天时间在互联网上寻找解释,但是当考虑到SDK更新时我会感到困惑,因为我不知道什么是最好的方法。

谢谢。

回答

1

documentation状态:

Facebook Platform supports two different OAuth 2.0 flows for user login: server-side (known as the authentication code flow in the specification) and client-side (known as the implicit flow). The server-side flow is used whenever you need to call the Graph API from your web server. The client-side flow is used when you need to make calls to the Graph API from a client, such as JavaScript running in a Web browser or from a native mobile or desktop app.

这使得它非常清楚:如果你想使用图形API从服务器端,然后使用服务器端的流量,如果你想从API调用客户端然后使用客户端流。 您当然可以使用服务器端流程进行身份验证,然后通过js sdk与图形api进行交互,或者以其他方式进行交互,但是在他们写作时这样做更有意义。

使用登录按钮意味着在js sdk的帮助下使用客户端流程。 的两种不同形式,你写的按键基本相同,因为他们在documentation说:

Using the new JavaScript SDK, the plugin is available via the <fb:login-button> XFBML tag or the <div class="fb-login-button"> HTML tag. 

至于试图张贴在墙上的用户,当您收到错误消息,我没有看到在你的例子中,你正在请求publish_stream permission这是需要在用户墙上发布。

+0

是的,这是有道理的,但我已阅读所有这些。我确实要求发布publish_stream权限,然后将其删除,以查看会发生什么。以前使用该应用程序的人仍然可以将事情发布到他们的墙上,但对于新人来说,它会抛出我所陈述的错误。这很烦人,因为我想在我自己的Facebook帐户上测试人们第一次访问该网站时获得的视图,但没有任何已经被接受的权限?是否有可能删除他们接受的每个人的权限? – JamesG 2012-03-07 14:28:01

+0

如果您拥有该权限并且有人授权,那么他们仍然拥有该权限并将继续拥有该权限,直到他们移除该应用或撤销该权限为止。您自己写的新用户将不会拥有此权限,因此该应用无法在自己的墙上张贴。发布在用户墙上的唯一方法是获得该许可。如果你想在他们授权你的应用之前测试它的外观,那么你可以只为你的用户删除这个应用,或者只是撤销权限:隐私设置>应用和网站(编辑设置)>你使用的应用(编辑设置) – 2012-03-07 14:47:44