2017-09-21 18 views
0

私はLexik JWTバンドル(Symfony 2.8)を使ってGoogleを認証しています。コントローラからjwtトークンを取得する方法(既にログインしているユーザ)

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; 
} 

だから私はいくつかのローカルホストにユーザーをリダイレクトし、「トークン」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; 

をそして、私は実際にいくつかのトークンを取得し、それは私が成功ハンドラから取得同じものではありません。私は、同様のコードを使用しています。ヘッダー "Autorization"パラメーターとして渡してみましたが、機能しません。 401エラーとメッセージが表示されています:

与えられた設定で特定のJWTを確認できません。 \ "lexik_jwt_authentication.encoder \"暗号化オプションが最後の認証以降に変更されている場合は、トークンを更新してください。問題が解決しない場合は、構成されたキー/パスフレーズが有効であることを確認してください。

私はここで間違っていますか?なぜ私は別のトークンを取得していますか、どのように私はフォームの成功ハンドラを得ているトークンを得ることができますか?

答えて

0

解決策が見つかりました。それは次のようになります:

$user = $this->get('security.token_storage')->getToken()->getUser(); 
$jwtManager = $this->get('lexik_jwt_authentication.jwt_manager'); 
$token = $jwtManager->create($user); 
関連する問題