我使用哪个Facebook登录按钮以及为什么


Which Facebook login button do I use and why?

我已经开始开发一个与facebook集成的网站,在使用Javascript SDK时似乎可以正常工作。我显示了用户的名字和个人资料图片很好。然后我到处阅读它最好使用JS进行身份验证连接,并使用PHP SDK运行API,因为它更容易。

因此,我不得不使用两种不同的登录方法中的一种,但就我的生活而言,我无法从中得到我想要的东西。文档似乎没有清楚地解释它们所描述的任何东西的利弊,以及什么情况最适合什么方法。

例如:

    <?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更新时,事情变得令人困惑,因为我不知道什么是最好的方法了。

谢谢。

文档说明:

Facebook平台为用户支持两种不同的OAuth 2.0流login:服务器端(称为规范)和客户端(称为隐式流)。这个每当需要从调用Graph API时,都会使用服务器端流您的web服务器。当您需要制作从客户端调用Graph API,例如在Web浏览器或本地移动或桌面应用程序。

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

登录按钮的使用意味着在js-sdk的帮助下使用客户端流。正如文档中所说,您编写的两种不同形式的按钮基本相同:

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权限。