webtechnick / cakephp-facebook-plugin
CakePHP Facebook 插件
Requires
- php: >=5.3.0
- composer/installers: *
This package is not auto-updated.
Last update: 2024-09-23 16:11:32 UTC
README
- 作者:Nick Baker (nick@webtechnick.com)
- http://www.webtechnick.com
- 许可:MIT
- 版本:3.1.3
Facebook 插件的目的是提供一个无缝的方式将您的 cakePHP 应用连接到每个人最喜欢的社交网络网站——Facebook。该插件的目标不仅是提供非常实用的动态功能,而且还提供对 Facebook API 的完整接口。
变更日志
- 1.0 初始版本 alpha
- 1.1 添加了 API 功能
- 1.2 初始版本 beta
- 1.2.1 小型错误修复和测试
- 1.3 添加 FacebookInfo 类,以便在任何地方轻松引用插件详细信息。
- 1.4.0 添加 FacebookApi 库。方便从任何地方访问 FacebookApi。
- 1.5.0 添加 Facebook 权限提示
- 1.5.1 Facebook Connect 可以接受类似于 cake 1.3 核心组件的设置
- 1.5.2 添加 Facebook.Connect 用户方法,可以像 Auth 一样检索用户数据。
- 1.5.3 添加 Facebook status() 函数到助手。
- 1.5.4: 修复了 Facebook.Connect 的一个错误,如果会话状态不稳定,会出现白屏。
- 1.5.5: 仅在初始化时修复了助手使用错误。以前依赖于 Connect 组件,但现在不再如此
- 1.6: 如果存在用户表但没有找到 facebook_id,Facebook.Connect 现在将更新用户表。
- 1.6.1: Facebook::share 现在将正确设置起始 URL,如果没有传入 URL。
- 1.7.0: 更新到最新的官方 Facebook PHP SDK,并使一切更具未来性(Theaxiom / https://www.kinspir.com)
- 1.7.1: 修复了 1.7.0 更新中的损坏测试
- 2.0.0: 功能更新
- FacebookHelper::loader() 现在不再需要,已弃用
- 如果检测到身份验证并且没有用户具有登录的 facebook_id,现在将创建用户
- FacebookHelper::logout 重定向选项现在允许基于数组的 cakephp URL
- 新功能
- FacebookHelper::like() 创建具有各种选项的喜欢按钮
- FacebookHelper::activity() 创建具有各种选项的活动流
- FacebookHelper::friendpile() 创建具有各种选项的 friendpile 小部件
- FacebookHelper::recommendations() 创建具有各种选项的推荐小部件
- 2.0.1: 新设置 ConnectComponent::createUser 布尔值。如果设置为 true(默认值),在成功的 Facebook 登录时,如果用户表中没有找到 facebook_id,组件将尝试从 Auth 组件的 introspection 创建新用户。通过在设置 Connect 组件时传递 'createUser' => false 来关闭此功能。
- 2.0.2: 新助手方法 getConfig() 可在 FacebookInfo 库中使用。使用此方法获取 Facebook 配置,而不是依赖于其他来源加载的配置文件。
- 2.0.3: 更新 Facebook::share 以允许使用 fbxml 选项,而不是默认不使用 fbxml。如果页面加载 facebook->init(),则 fbxml => true 是必需的。
- 2.1.0: 改进性能和新的 Facebook::disconnect 函数。
- 2.1.1: 修复了各种小错误。
- 2.2.0: 更新 Facebook PHP SDK
- 2.3.0: 添加了新的 Facebook::likebox 来替换 Facebook::fanbox()
- 2.3.1: 安全更新:现在创建 Facebook 用户时生成随机密码。
- 2.4.0: 添加三个身份验证回调:beforeFacebookSave、beforeFacebookLogin 和 afterFacebookLogin
- 2.4.1:向插件添加自定义区域。
- 2.4.2:修复了一些小错误。
- 2.4.3:修复了当User primaryKey不是'id'时的重复用户条目问题。
- 2.5.0:优化和修复了一些小问题(特别感谢 https://github.com/bar)
- 为FacebookHelper::init()添加了新的回调功能(页面刷新仍然是默认设置)。
- 更友好的FacebookHelper::share()现在使用Router而不是环境和$this->here
- 优化,将__syncFacebookUser移动到Controller->beforeFilter()之后,以便可以在beforeFilter中更改$noAuth(如果需要的话)。
- 3.0.0:升级到Facebook PHP SDK v 3.1.1
- 3.0.1:增加了对CakePHP 2.0的支持
-
2.0中的AuthComponent已被大幅重新设计,使得FacebookPlugin完成的猜测工作更难实现
-
因此,如果您想通过数据库进行用户/认证集成,则必须设置Facebook插件要交互的模型
-
在定义Facebook.Connect组件时必须设置此设置
-
如果您没有设置'model'键,则不会自动与您的Auth Model集成。
//Example AppController setup public $components = array('Session', 'Auth' => array( 'authenticate' => array( 'Form' => array( 'fields' => array('username' => 'email') ) ), 'authorize' => 'Controller' ), 'Facebook.Connect' => array('model' => 'User') );
-
- 3.1.0:增加了新的Facebook社交功能(注册和发送)
- FacebookHelper::registration()创建一个带有其Facebook信息的预填充的注册表单。
- ConnectComponent::registrationData()是一个有用的快捷方式,可以解析成功的注册帖子到Facebook。
- FacebookHelper::sendbutton()创建了一个漂亮的发送按钮。
- 3.1.1:更新Facebook PHP SDK到最新版本。
- 3.1.2:更新Facebook PHP SDK到最新版本v3.2.1。
- 3.1.3:更新Facebook PHP SDK到最新版本v3.2.3。
关于插件
- 博客:http://www.webtechnick.com/blogs/view/229/CakePHP_Facebook_Plugin_Auth_Facebook_and_more
- 文档:http://docs.webtechnick.com/facebook
- 在线演示:http://facebook.webtechnick.com
- 屏幕录像:http://tv.cakephp.org/video/webtechnick/2011/01/12/nick_baker_--_facebook_integration_with_cakephp
功能列表
- 通过Facebook实现的完整认证功能。Facebook认证将与或没有用户登录系统一起工作。可以无缝地与您的AuthComponent通过构建的用户认证一起使用 - 或者它可以作为您的首选认证系统。
- 可以极其轻松地创建动态可定制的Facebook内容。
- 分享(让您的用户分享他们在您的网站上找到的内容)
- 赞(让您的用户赞他们在您的网站上找到的内容)
- 发送(让您的用户发送他们在您的网站上找到的内容)
- 登录/注销(Facebook用户可以一键登录和注销,无需注册)
- 注册(Facebook用户可以使用其个人资料中的预填充数据在您的应用程序中注册)
- 活动(允许用户显示您的应用程序和朋友的动态)
- 好友堆(显示您的应用程序的好友)
- 推荐(根据当前页面显示推荐的URL)
- 粉丝盒子(允许用户成为您的应用程序的粉丝)
- 个人照片(显示已登录用户的个人照片)
- 直播流(通过Facebook创建动态直播活动并通过您的网站提供访问权限)
- 评论(通过允许用户使用Facebook评论在您的网站的任何部分进行评论来与您的用户建立联系)
- 状态(显示用户的状态)
- 在您的应用程序的任何地方都可以访问完整的Facebook API。通过内置的完整Facebook API访问权限直接从Facebook API构建自定义内容
安装和设置
-
首先,将存储库克隆到您的
app/Plugin/Facebook
目录git clone git://github.com/webtechnick/CakePHP-Facebook-Plugin.git app/Plugin/Facebook
-
在您的
app/Config/bootstrap.php
文件中加载插件//app/Config/bootstrap.php CakePlugin::load('Facebook');
一旦安装,如果您想使用除了分享按钮之外的任何其他功能,您将需要为您的应用程序获取一个api_key和secret。
-
在此网址创建一个Facebook应用程序:[https://#/developers/createapp.php](https://#/developers/createapp.php "https://#/developers/createapp.php")
-
一旦生成api_key和secret,您需要创建一个名为
app/Config/facebook.php
的文件。您可以在/Facebook/Config/facebook.php.example
中找到您所需的示例以及布局。//app/Config/facebook.php $config = array( 'Facebook' => array( 'appId' => 'YOUR_APP_ID', 'apiKey' => 'YOUR_API_KEY', 'secret' => 'YOUR_SECRET', 'cookie' => true, 'locale' => 'en_US', ) );
使用方法
您可以根据需要使用Facebook插件的全部或部分功能。至少,您可能希望使用Facebook Helper。
public $helpers = array('Facebook.Facebook');
如果您只想使用Facebook插件的分享功能,那么您已经完成了。
$this->Facebook->share('http://www.example.com/url_to_share'); //(default is the current page).
Facebook分享功能不需要其他任何东西。然而,要使用更高级的功能,您需要稍微准备一下页面以处理fbxml标签。
编辑布局以利用高级 Facebook功能
- 在您的布局中,强烈建议您将
<html>
标签替换为<?php echo $this->Facebook->html(); ?>
这对于一些在IE中工作的Facebook功能是必需的。 - 在页面底部包含
<?php echo $this->Facebook->init(); ?>
以加载Facebook JavaScript API,扫描您的页面以查找fbxml并将其替换为各种动态内容。
示例布局
<?php echo $this->Facebook->html(); ?>
<head>
<title><?php echo $title_for_layout ?></title>
</head>
<body>
<?php echo $content_for_layout; ?>
</body>
<?php echo $this->Facebook->init(); ?>
</html>
身份验证(Facebook Connect/Graph系统)
尽管名为Facebook Connect组件,但它立即利用了新的强大Facebook Graph API。[http://developers.facebook.com/docs/api](http://developers.facebook.com/docs/api "http://developers.facebook.com/docs/api")
要使用此功能,您首先需要更新您的Facebook应用程序,使用应用程序的连接URL。这是在Facebook应用程序设置中完成的。[https://#/developers/apps.php](https://#/developers/apps.php "https://#/developers/apps.php") 现在,您只需要将Facebook.Connect
组件添加到您的app_controller中。
public $components = array('Facebook.Connect');
就这样。现在,您已准备好接受Facebook身份验证。
登录/注销按钮
创建一个登录按钮:Facebook->login() ?>
创建一个请求扩展权限的登录按钮([http://developers.facebook.com/docs/authentication/permissions](http://developers.facebook.com/docs/authentication/permissions "http://developers.facebook.com/docs/authentication/permissions"))
<?php echo $this->Facebook->login(array('perms' => 'email,publish_stream')); ?>
创建一个注销按钮
<?php echo $this->Facebook->logout() ?>
每个按钮都有多个选项,请查看API以查看所有可用选项。[http://docs.webtechnick.com/facebook/classes/FacebookHelper.html](http://docs.webtechnick.com/facebook/classes/FacebookHelper.html "http://docs.webtechnick.com/facebook/classes/FacebookHelper.html")
注册表单
创建一个具有默认字段和宽度的注册表单。默认为发往自身。
<?php echo $this->Facebook->registration(); ?>
创建一个自定义注册表单。
<?php echo $this->Facebook->registration(array(
'fields' => 'name,gender,location,email',
'width' => 600,
'redirect-uri' => 'http://www.example.com/process_facebook_registration'
)); ?>
处理注册数据。
要访问由您的注册用户发布的注册数据,请使用方便的ConnectComponent::registrationData()函数。
if($user = $this->Connect->registrationData()){
print_r($user);
}
使用$user中的数据自行完成注册过程(保存新用户,查找/更新用户等)。
CakePHP Auth + Facebook.Connect
Facebook.Connect将与各种认证系统很好地配合。它与CakePHP AuthComponent的集成几乎无缝。
注意 由于CakePHP 2.0 AuthComponent的重新设计,ConnectComponent不再具有可用的内省功能。要使自动功能正常工作,需要告诉Connect您的用户数据存储在哪个模型中,如下所示
//Example AppController.php components settup with FacebookConnect
public $components = array('Session',
'Auth' => array(
'authenticate' => array(
'Form' => array(
'fields' => array('username' => 'email')
)
),
'authorize' => 'Controller'
),
'Facebook.Connect' => array('model' => 'User')
);
要集成到CakePHP Auth中,您需要修改您的用户表(或Auth组件使用的任何表)并添加一个新字段 -> facebook_id
。
ALTER TABLE `users` ADD `facebook_id` BIGINT(20) UNSIGNED NOT NULL
由于您已经有了认证系统,注销步骤还需要从您的认证系统中注销用户。您可以通过将重定向传递到$facebook->logout()
到您的系统注销认证操作来实现。
在这种情况下,如果您想显示注销按钮,应设置标签或img选项。
<?php echo $this->Facebook->logout(array('label' => 'Logout', 'redirect' => array('controller' => 'users', 'action' => 'logout'))); ?>
或者
<?php echo $this->Facebook->logout(array('redirect' => array('controller' => 'users', 'action' => 'logout'), 'img' => '/Facebook/img/facebook-logout.png')); ?>
这将注销Facebook认证,然后重定向到您的认证注销页面,以便您完成注销过程。
Facebook认证回调
有三个可用的回调函数,每个都在控制器中定义,使用它们是可选的。
-
beforeFacebookSave
处理将用户保存到用户表中。如果返回false,创建将被终止。//Add an email field to be saved along with creation. function beforeFacebookSave(){ $this->Connect->authUser['User']['email'] = $this->Connect->user('email'); return true; //Must return true or will not save. }
-
beforeFacebookLogin
在用户登录到Auth之前进行处理。function beforeFacebookLogin($user){ //Logic to happen before a facebook login }
-
afterFacebookLogin
在认证登录成功后处理任何需要的功能。function afterFacebookLogin(){ //Logic to happen after successful facebook login. $this->redirect('/custom_facebook_redirect'); }
高级辅助功能示例
<?php echo $this->Facebook->comments(); ?>
<?php echo $this->Facebook->picture($facebook_id); ?>
<?php echo $this->Facebook->recommendations(); ?>
<?php echo $this->Facebook->like(); ?>
<?php echo $this->Facebook->livestream(); ?>
<?php echo $this->Facebook->activity(); ?>
<?php echo $this->Facebook->friendpile(); ?>
Facebook API
您可以在应用程序的任何位置访问Facebook API。您需要首先包含API。
App::uses('FB', 'Facebook.Lib');
然后您可以实例化它,如果您正在运行PHP 5.3.x,您也可以对其进行静态调用。
PHP版本5.2.x
$Facebook = new FB();
$Facebook->api('/me');
PHP 5.3.x
FB::api('/me');
国际化
您可以通过辅助声明或通过配置文件config/facebook.php
来设置插件的区域设置(见文档顶部)。
public $helpers = array('Facebook.Facebook' => array('locale' => 'en_US'));
Facebook区域设置:http://developers.facebook.com/docs/internationalization/
阅读文档
我鼓励您阅读此插件的文档和API,以了解每个功能的全部功能和选项。API在这里:http://docs.webtechnick.com/facebook/