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



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

// api/src/Controller/GetMeAction.php
namespace AppController;
use AppEntityUser;
use SymfonyComponentRoutingAnnotationRoute;
use SymfonyComponentSecurityCoreSecurity;
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();
}
}

Im使用symfony 5.3,我想使用api平台规范化和项操作"得到";保留所有自定义配置、安全、服务。。。所以我在一个控制器中使用了forward()方法:

/**
* @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()]));
}

上一个答案是对的,但您忘记了从抽象控制器扩展控制器:

namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
class AdminController extends AbstractController
{
}

如果你想让User加入服务,你可以在__construct((中注入Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface

你可以得到用户喜欢:

public function getUser(): ?User
{
$token = $this->tokenStorage->getToken();
if (!$token) {
return null;
}
$user = $token->getUser();
if (!$user instanceof User) {
return null;
}
return $user;
}

最新更新