muffin / oauth2
CakePHP 3 使用league/oauth2-client系列进行认证
1.1.0
2018-11-26 13:43 UTC
Requires (Dev)
- cakephp/cakephp: ^3.5
- league/oauth2-github: ^2.0
- phpunit/phpunit: ^5.7.14|^6.0
This package is auto-updated.
Last update: 2024-08-28 01:53:18 UTC
README
CakePHP 3 使用league/oauth2-client进行认证。
安装
使用Composer
composer require muffin/oauth2
然后需要加载插件。
bin/cake plugin load Muffin/OAuth2
等等,你还没有完成。此插件不会要求任何客户端。你需要自己完成。例如,如果你想使用 Github 客户端,那么做
composer require "league/oauth2-github"
使用
首先,定义提供者
// either in `config/bootstrap.php` Configure::write('Muffin/OAuth2', [ 'providers' => [ 'github' => [ 'className' => 'League\OAuth2\Client\Provider\Github', // all options defined here are passed to the provider's constructor 'options' => [ 'clientId' => 'foo', 'clientSecret' => 'bar', ], 'mapFields' => [ 'username' => 'login', // maps the app's username to github's login ], // ... add here the usual AuthComponent configuration if needed like fields, etc. ], ], ]); // or in `src/Controller/AppController.php` $this->loadComponent('Auth', [ 'authenticate' => [ // ... 'Muffin/OAuth2.OAuth' => [ 'providers' => [ // the array from example above ], ], ], ]);
在授权成功后,如果用户没有本地实例,将触发一个事件(Muffin/OAuth2.newUser
)。使用它来创建用户,例如
// bootstrap.php use Cake\Event\Event; use Cake\ORM\TableRegistry; EventManager::instance()->on( 'Muffin/OAuth2.newUser', [TableRegistry::get('Users'), 'createNewUser'] ); // UsersTable.php use Cake\Event\Event; use League\OAuth2\Client\Provider\AbstractProvider; public function createNewUser(Event $event, AbstractProvider $provider, array $data) { $entity = $this->newEntity($data); $this->save($entity); return $entity->toArray(); // user data to be used in session }
最后,一旦收到令牌,将触发Muffin/OAuth2.afterIdentify
事件。使用此事件更新你的本地令牌,例如
// bootstrap.php use Cake\Event\Event; use Cake\ORM\TableRegistry; EventManager::instance()->on( 'Muffin/OAuth2.afterIdentify', [TableRegistry::get('Tokens'), 'createOrUpdate'] ); // TokensTable.php use Cake\Event\Event; use League\OAuth2\Client\Provider\AbstractProvider; public function createOrUpdate(Event $event, AbstractProvider $provider, array $data) { // ... return; // void }
接下来,你需要创建一个路由,该路由将被所有提供者使用
// config/routes.php Router::connect( '/oauth/:provider', ['controller' => 'users', 'action' => 'login'], ['provider' => implode('|', array_keys(Configure::read('Muffin/OAuth2.providers')))] );
现在,如果你已经阅读了书籍的AuthComponent
文档,你应该熟悉如何将其添加到新的认证对象中
// src/Controller/AppController.php $this->loadComponent('Auth', [ 'authenticate' => [ 'Form', 'Muffin/OAuth2.OAuth', ] ]);
补丁和功能
- 分支
- 修改,修复
- 测试 - 这很重要,所以它不会无意中出错
- 提交 - 不要修改许可证,todo,版本等。(如果你更改了它们,请在自己的提交中修改,这样我可以在拉取时忽略它们)
- 拉取请求 - 主题分支有加分项
为了确保你的PR被考虑,你必须遵循CakePHP编码规范。
错误和反馈
http://github.com/usemuffin/oauth2/issues
许可证
版权(c)2018,Use Muffin,并许可在MIT许可证下。