moz-morris/cakephp-facebook-auth

CakePHP 2.0 的 Facebook 身份验证处理器

dev-master 2013-01-12 18:27 UTC

This package is not auto-updated.

Last update: 2024-09-28 13:12:05 UTC


README

Facebook 身份验证处理器的目的是为基于 CakePHP 2.0 或更高版本的应用程序提供 Facebook 身份验证。处理器按照 Cake 推荐的方法构建,用于与内置的 AuthComponent 一起使用自定义身份验证对象。处理器本身是 FacebookAuth 插件的一部分,但这是为了使处理器易于分发,包括示例配置设置和示例控制器,其中详细说明了典型用例场景。

需要注意的是,尽管此处理器存储 Facebook 返回的访问令牌,但它目前提供调用 Graph API 的方法。它的功能是提供身份验证。当然,您可以使用访问令牌和您首选的方法与 Facebook 进行通信。

变更日志

  • 1.0 首次与全世界分享。
  • 1.1 默认添加电子邮件和姓名字段,并确保处理器使用配置设置

安装

获取代码

通过 Git

首先将仓库克隆到新的 app/Plugin/FacebookAuth 目录

git clone git://github.com/MozMorris/FacebookAuthenticate-CakePhp-Authentication-Handler.git /path/to/your/app/Plugin/FacebookAuth

通过 Composer

将依赖关系添加到您的 composer.json 文件中。(看起来 CakePHP 惯例是在 app/ 目录下放置 composer.json 文件)

"require": {
  "moz-morris/cakephp-facebook-auth": "dev-master"
}

然后执行 composer installcomposer update。您可能需要将 "minimum-stability": "dev" 添加到您的 composer.json 文件中。

Facebook 应用程序与应用配置

  1. 将示例配置 FacebookConfig.ini.example 重命名为 FacebookConfig.ini。它可以在 app/Plugin/FacebookAuth/Config/ 目录下找到
  2. 前往 Facebook 开发者应用,设置一个新的应用程序以获取 App ID/API 密钥和 App 密钥,或记录您现有应用程序的这些信息。注意:您的 'App Domain' 必须与您访问网站时使用的相同主机,才能启用身份验证。否则,当您尝试进行身份验证时,Facebook 将返回 "API 错误代码:191 | API 错误描述:指定的 URL 不属于该应用程序 | 错误信息:无效的 redirect_uri:给定 URL 不受应用程序配置允许"。
  3. 使用 App ID/API 密钥和 App 密钥更新 FacebookConfig.ini。
  4. 在您的引导文件 app/Config/bootstrap.php 中加载插件及其配置
  5. 在运行时配置 FacebookAuth 处理器

加载插件和配置(《引导文件》)

/**
 * Load custom configuration files using the IniReader class
 */
App::uses('IniReader', 'Configure');
Configure::config('default', new IniReader(APP . 'Plugin' . DS . 'FacebookAuth' . DS . 'Config' . DS));
Configure::load('FacebookConfig', 'default');

/**
 * Load Facebook Plugin
 */
CakePlugin::load('FacebookAuth');

在运行时配置处理器

public function beforeFilter()
{
  parent::beforeFilter();

  /**
   * Configure FacebookAuth handler
   */
  $this->Auth->authenticate['FacebookAuth.Facebook']['application'] = array(
   'id'     => Configure::read('facebook.app_id'),
   'secret' => Configure::read('facebook.app_secret')
  );
}

数据库

emailnamefacebook_user_idfacebook_access_token 字段添加到您的 User 模型中。在此示例中,我们向 users 表添加了字段,这对于使用某种用户身份验证的 Cake 应用程序来说几乎是标准做法。如果您的应用程序略有不同,则需要进行相应的更改。

ALTER TABLE `users` ADD `email` VARCHAR(255)  NOT NULL  DEFAULT '';
ALTER TABLE `users` ADD `name` VARCHAR(255)  NOT NULL  DEFAULT '';
ALTER TABLE `users` ADD `facebook_user_id` BIGINT  NULL  DEFAULT NULL;
ALTER TABLE `users` ADD `facebook_access_token` VARCHAR(255)  NULL  DEFAULT NULL;

用法

基本示例

public $components = array(
  'Auth'=> array(
    'authenticate' => array(
      'FacebookAuth.Facebook'
    )
  )
);

稍微有趣一些

public $components = array(
  'Auth'=> array(
    'loginAction' => array(
      'controller' => 'users',
      'action' => 'login'
    ),
    'loginRedirect' => array(
      'controller' => 'users',
      'action' => 'my_account'
    ),
    'authError' => 'Did you really think you are allowed to see that?',
    'authenticate' => array(
      'FacebookAuth.Facebook' => array(
        'fields' => array(
          'username' => 'email',
    			'password' => 'password'
        )
      )
    )
  )
);

请参阅 Cake Book 了解更多关于配置您的 CakePHP AuthComponent 的方法。

插件中还包含一个示例控制器,展示了如何实现此处理器。

app/Plugin/FacebookAuth/Controller/ExampleController.php