olivmai / linkvalue-oauth2-bundle
通过 LV Connect 实现认证的 Linkvalue OAuth 2.0 客户端提供者
1.1.2
2020-03-20 16:22 UTC
Requires
- symfony/http-client: ^5.0
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)。