Symfony 如何从控制器获取jwt令牌(用户已登录)
所以我使用Lexik JWT bundle(Symfony 2.8)通过Google进行身份验证,当用户登录时,它运行良好。我的成功处理程序如下所示:Symfony 如何从控制器获取jwt令牌(用户已登录),symfony,token,jwt,Symfony,Token,Jwt,所以我使用Lexik JWT bundle(Symfony 2.8)通过Google进行身份验证,当用户登录时,它运行良好。我的成功处理程序如下所示: public function onAuthenticationSuccess(Request $request, TokenInterface $token) { $user = $token->getUser(); $jwt = $this->jwtManager->create($user); $
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”get
变量传递,这很好。稍后,我可以通过标头传递该令牌值,并获得身份验证
问题是-我想从我的控制器获得相同的令牌。我正在使用类似的代码:
$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;
我确实得到了一些代币,但这和我从成功管理者那里得到的不同。尝试将其作为标题“自动化”参数传递,但无效。我收到401错误和消息:
无法通过给定配置验证给定JWT。如果“lexik\u jwt\u authentication.encoder”加密选项自上次身份验证后已更改,请续订令牌。如果问题仍然存在,请验证配置的密钥/密码短语是否有效
我做错了什么?为什么我要获得不同的令牌以及如何从成功处理程序中获得令牌?找到了解决方案。它是这样的:
$user = $this->get('security.token_storage')->getToken()->getUser();
$jwtManager = $this->get('lexik_jwt_authentication.jwt_manager');
$token = $jwtManager->create($user);
我知道这是一个老问题,但我找到了一个解决方案,可以让您在任何地方使用令牌,而不仅仅是在控制器中 不要使用令牌接口,而是使用令牌存储接口
public function __construct(TokenStorageInterface $tokenStorage) {
$this->token = $tokenStorage->getToken();
$this->user = $this->token->getUser();
}