Как получить имя пользователя после успешной аутентификации? - PullRequest
0 голосов
/ 22 января 2020

Я использую аутентификацию Gitlab в моем текущем symfony проекте. Я использую следующие два пакета.

  • 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: App\Security\UserProvider
    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            anonymous: true
            guard:
                authenticators:
                    - App\Security\GitlabAuthenticator

    access_control:
        - { path: ^/connect, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/, roles: ROLE_USER }

Работает нормально и хранит повар ie PHPSESSID. Мне нужно получить имя пользователя после успешного входа в систему.

Ответы [ 2 ]

1 голос
/ 22 января 2020

UserProvider (используется в процессе входа в систему) возвращает a UserInterface, которые представляют пользователя. Из него вы можете получить имя пользователя.

Теперь, как получить этого пользователя?

В зависимости от Symfony версии и где вы хотите получить к нему доступ, у вас есть несколько возможностей:

  • Symfony <3,2 <ul>
  • В контроллере -> вы можете использовать $this->getUser()->getUsername();
Symfony> = 3,2
  • In controller -> Inject UserInterface напрямую как зависимость ( read more )

Для обоих случаев, если вам нужен пользователь не в контроллере, вы можете внедрить (в зависимости от вашей symfony версии) сервис TokenStorage или Security (не могу найти, какая версия поддерживает какую, наверняка Security Компонент поддерживается в sf5 ).

Если вы выберете (или будете вынуждены) go с TokenStorage (или его интерфейсом), вам необходимо выполнить следующие шаги:

  1. getToken
  2. проверить, не является ли токен null
  3. получить имя пользователя из токена (или опционально получить всего пользователя a затем найдите имя пользователя)
1 голос
/ 22 января 2020

Это очень очень просто. Просто используйте $this->getUser().

public function index()
{
    /** @var \App\Entity\User $user */
    $user = $this->getUser();

    return new Response('Well hi there '.$user->getFirstName());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...