身份验证成功后如何检索用户名?



我在当前的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版本(TokenStorageSecurity服务(找不到哪个版本支持哪个版本,确定Security组件在sf5中受支持(。

如果您选择(或被迫(使用TokenStorage(或其界面(,则需要执行以下步骤:

  1. 获取令牌
  2. 检查令牌是否未null
  3. 令牌中检索用户名(或者可以选择检索整个用户,然后从那里检索用户名(

最新更新