Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 如何从控制器获取jwt令牌(用户已登录)_Symfony_Token_Jwt - Fatal编程技术网

Symfony 如何从控制器获取jwt令牌(用户已登录)

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); $

所以我使用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”
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();
}