insolis/facebook-service-provider

轻量级的silex服务,简化与Facebook的通信

v1.3 2014-03-20 11:50 UTC

This package is not auto-updated.

Last update: 2024-09-14 13:02:24 UTC


README

这是一个轻量级的 Silex 服务,帮助创建Facebook应用。

依赖项

它依赖于另外两个提供者

它还使用当前请求。

配置

通过fb.options键完成。它应该是一个具有以下键的数组

  • app_id:您应用的ID
  • app_secret:您应用的密钥令牌
  • permissions:所需权限的数组
  • redirect_route:负责处理新用户身份验证的路由名称

用法

服务设置了以下会话键

  • fb.access_token:您可以使用它来对图API进行请求的访问令牌
  • fb.page_liked:当前页面是否被喜欢

注册了一个在您的中间件之前运行的before()中间件。它处理两种情况

  • 这是一个POST请求,并且我们有signed_request参数:解码是自动完成的,并通过fb.data键设置在POST值中
  • 这是一个对上述重定向路由的请求,并且我们有code查询参数:自动获取令牌,然后自动完成用户详情,并通过fb.data键设置在POST值中

在这两种情况下,都会分派事件fb.user_info,其中用户数据作为主题。

事件

  • fb.user_info:从Facebook获取用户数据时
  • fb.like:当用户刚刚喜欢了页面时
  • fb.unlike:当用户刚刚取消了对页面的喜欢时

示例

一个示例应用程序级别的before中间件,用于自动登录用户

<?php

$app->before(function (Request $request) use ($app) {
    if ($request->request->has("fbdata")) {
        $data = $request->request->get("fbdata");

        if (isset($data["user_id"])) {
            $app["session"]->set("user_id", $data["user_id"]);
        }
    }

    $route = $request->get("_route");
    if (
        !$app["session"]->has("user_id") &&
        !in_array($request->get("_route"), array("homepage", "fb_addhandler"))
    ) {
        return new Response("<script type='text/javascript'>top.location = '" . $app["fb"]->getAuthorizationUrl() . "';</script>");
    }
});

一个示例重定向路由,用于处理新用户身份验证

<?php

$app->post("/fb_addhandler", function (Request $request) use ($app) {
    if (!$request->request->has("fbdata")) {
        return $app->redirect($app["url_generator"]->generate("homepage"));
    }

    $data = $request->request->get("fbdata");

    try {
        $app["db.user"]->insert(array(
            "id"    =>  $data["id"],
        ));
    }
    catch (\Exception $e) {
        //this is not the user's first time enabling the app
    }

    $app["session"]->set("user_id", $data["id"]);

    return $app->redirect($app["url_generator"]->generate("homepage"));
})->bind("fb_addhandler");