sensiolabs/connect

此包已被废弃且不再维护。作者建议使用 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 许可证授权。