olivmai/linkvalue-oauth2-bundle

通过 LV Connect 实现认证的 Linkvalue OAuth 2.0 客户端提供者

1.1.2 2020-03-20 16:22 UTC

This package is auto-updated.

Last update: 2024-09-21 02:09:57 UTC


README

此软件包为通过 LV Connect 实现认证提供了 Linvalue OAuth 2.0 支持。

安装

composer require olivmai/linkvalue-oauth2-bundle

用法

注册新的 Bundle

# config/bundles.php
return [
    /* ... */
    Olivmai\LinkvalueOAuth2Bundle\LinkvalueOAuth2Bundle::class => ['all' => true],
];

添加配置文件

在 config/packages 目录中创建一个名为 linkvalue_oauth2.yaml 的配置文件,并填充以下内容

# config/packeges/linkvalue_oauth2.yaml
linkvalue_oauth2:
    client_id: '%env(resolve:OAUTH_LINKVALUE_APP_ID)%'
    client_secret: '%env(resolve:OAUTH_LINKVALUE_APP_SECRET)%'
    redirect_uri: '%env(resolve:OAUTH_LINKVALUE_REDIRECT_URL)%'
    scopes: '%env(resolve:OAUTH_LINKVALUE_SCOPE)%'

最后,确保您已经在项目中配置了环境变量

添加控制器

最小控制器代码可能如下所示。connectCheckAction 为空,因为我们使用基于守卫的认证,但您可以根据需要在此处实现自己的逻辑。

<?php

namespace App\Controller;

use Olivmai\LinkvalueOAuth2Bundle\Provider\LinkvalueProvider;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;

class LinkvalueController extends AbstractController
{
    /**
     * Link to this controller to start the "connect" process
     *
     * @Route("/connect/linkvalue", name="connect_linkvalue_start")
     * @param LinkvalueProvider $linkvalueProvider
     * @return RedirectResponse
     */
    public function connectAction(LinkvalueProvider $linkvalueProvider): RedirectResponse
    {
        // redirect to LV Connect and then back to connect_linkvalue_check, see below
        return $linkvalueProvider->redirect();
    }

    /**
     * @Route("/connect/linkvalue/check", name="connect_linkvalue_check")
     * @param Request $request
     * @param LinkvalueProvider $linkvalueProvider
     */
    public function connectCheckAction(Request $request, LinkvalueProvider $linkvalueProvider)
    {
        // leave this method blank to authenticate through Guard authenticator
    }
}

Symfony 安全配置

然后您需要在 security.yaml 文件中添加对适当的 User provider 和 guard authenticator 的引用,如下所示

security:
    # ...
    providers:
        # ...
        linkvalue_provider:
            id: Olivmai\LinkvalueOAuth2Bundle\Security\User\LinkvalueUserProvider
    firewalls:
        # ...
        yourfirewall:
            # ...
            guard:
                authenticators:
                    - Olivmai\LinkvalueOAuth2Bundle\Security\Authenticator\LinkvalueAuthenticator
            provider: linkvalue_provider
            logout:
                path: app_logout
                target: login
            

完成!

就是这样,现在您可以通过 LV Connect 认证进行登录。这种简单的实现不提供数据库用户存储。认证的用户只有一个用于识别的电子邮件。如果您需要有关用户的更多信息或需要在数据库中存储信息,您可以实现自己的逻辑,使用自己的 UserProvider 和/或 Authenticator。在 LinkvalueProvider 类中进行认证时调用的 fetchUser() 方法返回一个 LinkvalueUser,如下所示

LinkvalueUser :
  -id: "xxxxx"                 // string
  -firstName: "xxxxx"           // string
  -lastName: "XXXXX"           // string
  -email: "xxxxx@xxxxx.xx"     // string
  -profilePictureUrl: "xxxxxx"  // string (url to profile picture)
  -tags: []                    // array
  -roles: []                   // array
  -createdAt: DateTime         // DateTime
  -city: null                  // string|null
  -job: null                   // string|null
}

鸣谢

许可证

MIT 许可证 (MIT)。