gpt4 book ai didi

symfony - 如何从 Controller 获取jwt token (用户已登录)

转载 作者:行者123 更新时间:2023-12-02 20:39:10 39 4
gpt4 key购买 nike

因此,我使用 Lexik JWT bundle (Symfony 2.8) 通过 Google 进行身份验证,并且当用户登录时效果很好。我的成功处理程序如下所示:

public function onAuthenticationSuccess(Request $request, TokenInterface $token)
{
$user = $token->getUser();
$jwt = $this->jwtManager->create($user);
$response = new JsonResponse();
$event = new AuthenticationSuccessEvent(['token' => $jwt], $user, $response);
$this->dispatcher->dispatch(Events::AUTHENTICATION_SUCCESS, $event);
$redirectResponse = new RedirectResponse('http://localhost:3000?token='.$event->getData()['token']."&username=".$user->getUsername());
return $redirectResponse;
}

因此,我将用户重定向到某个本地主机并将 token 作为“token”get 变量传递,效果很好。稍后我可以通过 header 传递该 token 值并获得身份验证。

问题是 - 我想从我的 Controller 获得相同的 token 。我正在使用类似的代码:

$jwtManager = $this->get('lexik_jwt_authentication.jwt_manager');

$tokenStorage = $this->get('security.token_storage');
$token = $tokenStorage->getToken();

$user = $token->getUser();
$jwt = $jwtManager->create($user);
$response = new JsonResponse();
$event = new AuthenticationSuccessEvent(['token' => $jwt], $user, $response);
$token = $event->getData()['token'];
echo $token;

我确实得到了一些 token ,但这与我从成功处理程序中得到的 token 不同。尝试将其作为 header “Autorization”参数传递,但它不起作用。我收到 401 错误和消息:

无法通过给定配置验证给定 JWT。如果自上次身份验证以来“lexik_jwt_authentication.encoder”加密选项已更改,请更新 token 。如果问题仍然存在,请验证配置的 key /密码是否有效。

我在这里做错了什么?为什么我获得不同的 token 以及如何获得我从成功处理程序中获得的 token ?

最佳答案

找到了解决方案。它是这样的:

$user = $this->get('security.token_storage')->getToken()->getUser();
$jwtManager = $this->get('lexik_jwt_authentication.jwt_manager');
$token = $jwtManager->create($user);

关于symfony - 如何从 Controller 获取jwt token (用户已登录),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46343946/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com