symfonycorp/connect

SymfonyConnect SDK


README

关于

这是SymfonyConnect API的官方SDK。它可以用于公共API或与已注册的OAuth应用程序一起使用。要注册应用程序,请访问您的SymfonyConnect账户

安装

要安装SDK,运行以下命令,您将获得最新版本

composer require symfonycorp/connect

用法

OAuth

要在Symfony应用程序中使用SDK,我们建议使用内置的包。

否则,您可以从以下部分获得灵感,它将向您展示如何在Silex应用程序中包含OAuth身份验证。

注意:我们假设您已在SymfonyConnect上注册了您的应用程序,并且您拥有您的application_idapplication_secretscope

  1. 使用注册应用程序时提供的我们给出的数据配置您的silex应用程序。

    // index.php
    use SymfonyCorp\Connect\Api\Api;
    use SymfonyCorp\Connect\OAuthConsumer;
    
    $app = new Silex\Application();
    $app['connect_id'] = 'application_id';
    $app->register(new Silex\Provider\UrlGeneratorServiceProvider());
    $app->register(new Silex\Provider\SessionServiceProvider());
    
    $app['connect_secret'] = 'application_secret';
    // List of scope copy-pasted from your application page on SymfonyConnect
    $app['connect_scope'] = array(
        'SCOPE_ADDITIONAL_EMAILS',
        'SCOPE_BIRTHDAY',
        'SCOPE_EMAIL',
        'SCOPE_LOCATION',
        'SCOPE_PUBLIC',
        'SCOPE_SSH_KEYS',
    );
    
    $app['connect_consumer'] = new OAuthConsumer(
        $app['connect_id'],
        $app['connect_secret'],
        implode(' ', $app['connect_scope']) // scope MUST be space separated
    );
    $app['connect_api'] = new Api();

    完成。现在我们可以继续进行第二步。

  2. 我们需要创建两个控制器来处理OAuth2三腿工作流程。

    第一个控制器的目标是让用户重定向到SymfonyConnect,以便请求您的应用程序使用其数据的授权。此控制器将绑定到connect_auth路由。在您的模板中,您需要创建一个指向此路由的链接。

    // index.php
    $app->get('/connect/new', function () use ($app) {
        $callback = $app['url_generator']->generate('connect_callback', array(), true);
        $url = $app['connect_consumer']->getAuthorizationUri($callback);
    
        return $app->redirect($url);
    })->bind('connect_auth');

    第二个控制器是在SymfonyConnect将用户重定向到您的应用程序后欢迎用户的控制器。在注册客户端时,您必须提供指向此控制器的精确绝对URL。

    $app->get('/connect/callback', function (Request $request) use ($app) {
        // There was an error during the workflow.
        if ($request->get('error')) {
            throw new \RuntimeException($request->get('error_description'));
        }
    
        // Everything went fine, you can now request an access token.
        try {
            $data = $app['connect_consumer']->requestAccessToken($app['url_generator']->generate('connect_callback', array(), true), $request->get('code'));
        } catch (OAuthException $e) {
            throw $e;
        }
    
        // At this point, we have an access token and we can use the SDK to request the API
        $app['connect_api']->setAccessToken($data['access_token']); // All further request will be done with this access token
        $root = $app['connect_api']->getRoot();
        $user = $root->getCurrentUser();
        $user->getBadges()->refresh();
    
        $app['session']->start();
        $app['session']->set('connect_access_token', $data['access_token']);
        $app['session']->set('connect_user', $user);
    
        return $app->redirect('/');
    })->bind('connect_callback');
  3. 从模板创建链接

    在模板中,您可以使用以下代码片段来渲染一个SymfonyConnect按钮

    <a href="#" class="connect-with-symfony">
        <span>Log in with SymfonyConnect</span>
    </a>

    并包含以下CSS文件:https://connect.symfony.com/css/sln.css

就这样!您的应用程序现在可以使用SymfonyConnect作为身份验证方法了!

API

SymfonyConnect Connect API是RESTful的,并且(尝试)符合HATEOAS原则。

以下是一些有用的食谱。

  1. 搜索

    $root = $api->getRoot();
    
    // Will search for users
    $users = $root->getUsers('fab');
  2. 编辑认证用户

    $app['connect_api']->setAccessToken($app['session']->get('connect_access_token'));
    $root = $app['connect_api']->getRoot();
    $user = $root->getCurrentUser();
    $user->setBiography("I'm sexy and I know it.");
    $user->submitForm();

如您从这些示例中看到,您必须始终通过API根来执行操作。这是因为API是可发现的,并且SDK不应了解除了API的入口点之外的内容。

许可证

此库受MIT许可证的许可。