Symfony/Api platorm/JWT在登录后获取当前用户

Symfony/Api platorm/JWT在登录后获取当前用户,symfony,jwt,api-platform.com,Symfony,Jwt,Api Platform.com,大家早上好 求你了,我需要帮助。我使用的是JWT身份验证,一切都很好。但我的问题是在登录后检索当前用户。我在文档中看到,我可以创建一个控制器来执行此操作,但在完成此操作后,我得到了id参数未给出的错误。 这是与用户实体相关的控制器 // api/src/Controller/GetMeAction.php namespace App\Controller; use App\Entity\User; use Symfony\Component\Routing\Annotation\Route;

大家早上好 求你了,我需要帮助。我使用的是JWT身份验证,一切都很好。但我的问题是在登录后检索当前用户。我在文档中看到,我可以创建一个控制器来执行此操作,但在完成此操作后,我得到了id参数未给出的错误。 这是与用户实体相关的控制器

// api/src/Controller/GetMeAction.php

namespace App\Controller;

use App\Entity\User;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Security;

class GetMeAction
{
    /**
     * @param Security
     */
    private $_security;

    public function __construct(Security $security)
    {
        $this->_security = $security;
    }

    /**
     * @Route(
     *     name="get_me",
     *     path="get/me",
     *     methods={"GET"},
     *     defaults={
     *         "_api_resource_class"=User::class,
     *         "_api_item_operation_name"="get_me"
     *     }
     * )
     */
    public function __invoke(Request $request): User
    {
        return $this->_security->getUser();
    }
}

在控制器中,您不需要$\安全性,您可以使用$this->getUser直接访问当前用户前面的答案是正确的,但是您忘记了从抽象控制器扩展控制器:

名称空间App\Controller; 使用Symfony\Bundle\FrameworkBundle\Controller\AbstractController; 类AdminController扩展了AbstractController { } 如果希望在服务中获得用户,可以在\uu构造中插入Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface

您可以获得如下用户体验:

公共函数getUser:?用户 { $token=$this->tokenStorage->getToken; 如果!$token{ 返回null; } $user=$token->getUser; 如果!$user instanceof user{ 返回null; } 返回$user; }
我使用symfony 5.3,我想使用api平台规范化和项操作来保持所有自定义配置、安全性、服务。。。 因此,我在控制器中使用了正向方法:

/**
 * @Route("/api/user/me", name="get_me")
 */
public function getMe(): Response
{
    $router = $this->get('router')->getRouteCollection()->get('api_users_get_item');
    $defaults = $router->getDefaults();
    return $this->forward($router->getDefault('_controller'), array_merge($defaults, [ 'id' => $this->getUser()->getId()]));
}

他不扩展Symfony控制器,因此他无法访问Symfony控制器创建的此方法。更改\u api\u项目\u操作\u名称\u api\u集合\u操作\u名称。这解决了问题。谢谢你,伊维