muffin/oauth2

CakePHP 3 使用league/oauth2-client系列进行认证

安装次数: 66 143

依赖关系: 1

建议者: 0

安全: 0

星标: 26

关注者: 6

分支: 12

类型:cakephp-plugin

1.1.0 2018-11-26 13:43 UTC

This package is auto-updated.

Last update: 2024-08-28 01:53:18 UTC


README

Build Status Coverage Total Downloads License

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许可证下。