Я создавал API с использованием symfony и Graphql (youshido / graphql-bundle), я хочу получить пользователя из токена внутри API. Я должен передать имя пользователя в качестве параметра в запросе, или я могу получить пользователя из токена для всех запросов?
какое лучшее решение? и как я могу получить токен для функции разрешения?
public function resolve($value, array $args, ResolveInfo $info)
{
return $this->container->get('resolver.user')->save($args);
}
Спасибо.
Я обновил вопрос
$tokenStorage = $this->container->get('security.token_storage'); $user = $tokenStorage->getToken()->getUser(); if ($user instanceof User) { // The user which is calling you is currently authenticated } else { // Unfortunately the user IS'NT authenticated :/ } Попробуйте, если вы зайдете в else, у вас ошибка конфигурации app/config/security.yml





Если вы разрабатываете API, вы должны аутентифицировать своего пользователя в каждом запросе с помощью токена на предъявителя. Apis не имеют состояния: они не хранят информацию cookie в вашем браузере (вы могли бы, но это бессмысленно). Вместо этого вы передаете токен в заголовке авторизации каждого запроса, и это ваш способ аутентификации.
Вы можете использовать проверенный lexik / jwt-аутентификации-связка для реализации системы аутентификации веб-токенов json. Но сначала убедитесь, что вы понимаете, что такое JWT и как их правильно использовать.
решение состоит в том, чтобы ввести хранилище токенов в конструктор, а затем получить от него пользователя
public function __construct(TokenStorage $tokenStorage)
{
$this->tokenStorage = $tokenStorage;
}
чтобы получить пользователя из токена:
$user = $this->tokenStorage->getToken()->getUser();
Пожалуйста, свяжите свою конфигурацию
security.yml, все зависит от этого. Если вы находитесь на аутентифицированном маршруте, вы сможете получить пользователя из хранилища токенов ($this->getUser()с контроллеров). Вы также можете получить пользователя из службы tokenStorage во всем своем приложении.