繁体   English   中英

使用 facebook 应用程序对网络链接进行一次身份验证

[英]one time authentication for weblink with facebook app

我想通过我的网站验证我的 facebook 配置文件,以便我可以从页面中获取信息。 有人建议我通过临时页面使用 facebook api 进行一次身份验证。 有点像:

<fb:login-button params="some permission" />

我是编码 facebook 应用程序的新手。 但这似乎是 fbml。 我如何使用它通过我自己的个人资料来验证我的网站。 我不需要用户登录我的网站。 我只需要从我的页面中提取信息。

facebook 文档稀疏且零散。 我登录时得到的只是这个代码片段。 我不明白如何通过这种方法验证网络链接。

FB.login(function(response) {
  if (response.session) {
    // user successfully logged in
  } else {
    // user cancelled login
  }
});

任何人都可以发光吗?

让我们从头开始:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml" xml:lang="en" lang="en">

fbml 需要它才能工作。 下一个:

<fb:login-button autologoutlink="true"></fb:login-button>
<div id="fb-root"></div>  

这两行创建了“facebook 登录按钮”,您应该将它们放在您希望按钮出现的 html 中。

在您的结束正文标记之前添加:

<script type="text/javascript" src="https://connect.facebook.net/en_US/all.js"></script>
<script>
    window.fbAsyncInit = function() {
        FB.init({appId: 'YOUR APP ID HERE', status: true, cookie: true, xfbml: true});

        FB.Event.subscribe("auth.login", function(response) {

            if(response.session) {                      
                      // this is where you handle facebook's response 
            }

        });

    };

</script>

您在这里所做的是首先使用您的应用程序 ID(您需要创建一个应用程序)初始化与 facebook 的连接,并注册一个“auth.login”事件。 每次单击 facebook 登录按钮并成功登录到 facebook 或 facebook 自动登录时都会触发 auth.login 事件。

你可以在这里找到 auth.login 和其他事件的解释,看左边的侧边栏,所有的事件都列出来了。

响应是 JSON 格式,它包含您的基本 session 信息:

{
    status: 'connected',
    session: {
        access_token: '...',
        expires:'...',
        secret:'...',
        session_key:'...',
        sig:'...',
        uid:'...'
    }
}

你可以在这里阅读更多关于它的信息。 如果您的状态确实“已连接”,则下一个最重要的信息是 uid,这是您唯一的 facebook 标识符,一个公共 id,您可以使用它向 facebook 发送更多请求。 您如何处理响应取决于您。 一个明显的选择是通过 ajax 将其发送到将您登录到应用程序的脚本。

要从 facebook 获取更多信息,您需要下载php sdk 要使用 sdk:

<?php

include_once "facebook-sdk-3.0.0/src/facebook.php";

$appID     = "YOUR APP ID";
$appSecret = "YOUR APP SECRET";

$cookie = "fbs_{$appID}";
$cookie = isset($_COOKIE[$cookie]) ? trim($_COOKIE[$cookie], '"') : "";

if(empty($cookie)) {
    echo "no facebook cookie";
    die();
}

parse_str($cookie, $data);

$facebook = new Facebook(array(
  "appId"  => $appID,
  "secret" => $appSecret,
  "cookie" => true           
));        

$facebook->setAccessToken($data["access_token"]);

$user = $facebook->getUser();

$profile = $facebook->api("/me");

?>  

因此,首先您解析名为“fbs_YOUR_APP_ID”并包含您的 session 信息(url 编码)的 facebook cookie。 您真正需要的是access_token (已验证会话的唯一标识符),它也在之前的 JSON 响应 object 中返回给您。 然后通过 Facebook object 你可以做和api 请求你想要。

现在要拥有完整的身份验证机制,您应该创建一个类似的连接脚本,而不是从 cookie 中获取 session 信息,它应该从 auth.login 发生时返回的响应 object 中获取它们(可能通过 ajax)。

您应该阅读身份验证工作流文档以更好地了解 facebook 连接的工作原理。

A good and easy way to deal with Facebook authentication is to implement the server side flow with the Facebook PHP SDK ( see on github ). 所以你会有类似的东西:

require "facebook.php";
$facebook = new Facebook(array(
    'appId'  => YOUR_APP_ID,
    'secret' => YOUR_APP_SECRET,
));

$user = $facebook->getUser();

如果用户已登录,则$user是他的 Facebook ID。 然后,您必须通过调用 API 来检查您是否拥有有效的访问令牌:

  • 如果它没有引发任何异常,那么您有一个有效的访问令牌

  • 如果是这样,那么您必须重新验证用户。

这里:

if ($user) {
  try {
    $facebook->api('/me');
  } catch (FacebookApiException $e) {
    $user = null;
  }
}

然后您需要显示登录或注销链接:

<?php if ($user): ?>
    <a href="<?php echo $facebook->getLogoutUrl() ?>">Logout of Facebook</a>
<?php else: ?>
    <a href="<?php echo $facebook->getLoginUrl() ?>">Login with Facebook</a>
<?php endif ?>

当用户登录并且您拥有有效的访问令牌时,您可以调用 API 从 Facebook 获取数据:

$user_profile = $facebook->api('/me');

您可能需要查看Facebook PHP SDK 的示例页面,该页面有据可查。

希望有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM