我在当前的symfony项目中使用Gitlab身份验证。我正在使用以下两个软件包。
- Omines/OAuth2-GITLAB
- knpuniversity/oauth2-client-bundle
在我的security.yaml
文件中
security:
# https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
providers:
app_user_provider:
id: AppSecurityUserProvider
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
anonymous: true
guard:
authenticators:
- AppSecurityGitlabAuthenticator
access_control:
- { path: ^/connect, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/, roles: ROLE_USER }
这工作正常,它正在存储cookiePHPSESSID
。登录成功后,我需要检索用户名。
这非常简单。只需使用$this->getUser()
.
public function index()
{
/** @var AppEntityUser $user */
$user = $this->getUser();
return new Response('Well hi there '.$user->getFirstName());
}
UserProvider
(在登录过程中使用(返回一个UserInterface
,它代表一个用户。从中您可以访问用户名。
现在,如何检索该用户?
根据Symfony版本,以及你想访问它的位置,你有几种可能性:
- Symfony <3.2
- 在控制器 -> 中,您可以使用
$this->getUser()->getUsername();
- 在控制器 -> 中,您可以使用
- Symfony>=3.2
- 在控制器 -> 直接将
UserInterface
作为依赖项注入(了解更多(
- 在控制器 -> 直接将
对于这两种情况,如果你需要的用户不在控制器中,你可以注入(基于你的symfony版本(TokenStorage
或Security
服务(找不到哪个版本支持哪个版本,确定Security
组件在sf5中受支持(。
如果您选择(或被迫(使用TokenStorage
(或其界面(,则需要执行以下步骤:
- 获取令牌
- 检查令牌是否未
null
从 - 令牌中检索用户名(或者可以选择检索整个用户,然后从那里检索用户名(