insolis / facebook-service-provider
轻量级的silex服务,简化与Facebook的通信
v1.3
2014-03-20 11:50 UTC
Requires
- silex/silex: ~1.1
This package is not auto-updated.
Last update: 2024-09-14 13:02:24 UTC
README
这是一个轻量级的 Silex 服务,帮助创建Facebook应用。
依赖项
它依赖于另外两个提供者
它还使用当前请求。
配置
通过fb.options
键完成。它应该是一个具有以下键的数组
app_id
:您应用的IDapp_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");