symfony 2.8で比較的新しいGuard
サブシステムのAbstractGuardAuthenticator
で遊んでいます。Symfony 2.8 Guard AbstractGuardAuthenticator、本当のトークンを返す方法は?
私の設定は本当に簡単です。私は保護されたURLに要求を送信します。パスワードはbase64で暗号化されたusername:passwordです。データベースとの両方をチェックし、トークンを返す必要があります。
認証に成功する方法:
public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
{
//If login successful, return token
return new Response($this->tokenStorage->getToken());
}
それは何を返すことです:
今PostAuthenticationGuardToken(user="test", authenticated=true, roles="ROLE_ADVANCED,
ROLE_USER")
に、これは私がAbstractGuardAuthenticator
はまったく同じこのトークンを作成するための方法を定義していることを与えられた期待するものですこの。
public function createAuthenticatedToken(UserInterface $user, $providerKey)
{
return new PostAuthenticationGuardToken(
$user,
$providerKey,
$user->getRoles()
);
}
UPDATE 1.1:
私は今、自分のアプリケーションのAbstractGuardAuthenticatorにJSONウェブトークンを実装しようとしていますLexikJWTAuthenticationBundle
を使用します。 Lexikバンドルは成功と失敗のハンドラの両方を提供します:lexik_jwt_authentication.handler.authentication_success
& lexik_jwt_authentication.handler.authentication_failure
特定のJWT変数を注入するクラスを指します。どうすればAbstractGuardAuthenticator
の成功と失敗のハンドラにそれらをフックできますか?
crud:
anonymous: ~
guard:
authenticators:
- app.token_authenticator
pattern: ^/database/
そして私は現在、拡張し、私自身のトークン認証システムの代わりに、両方
GuardAuthenticatorInterface
を実装するなど
AbstractGuardAuthenticator
で
JWTTokenAuthenticator
をマージしています
public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
{
if ($token = $request->headers->get('X-AUTH-TOKEN')) {
//on success, let the request continue
} else {
//If login successful, return token
return new Response($this->tokenStorage->getToken());
}
}
public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
{
$data = array(
'message' => strtr($exception->getMessageKey(), $exception->getMessageData())
// or to translate this message
// $this->translator->trans($exception->getMessageKey(), $exception->getMessageData())
);
return new JsonResponse($data, 403);
}
Guard
成功と失敗の方法。
おかげでジャスパー、私は今それを読むつもりですそして私はできるだけ早くあなたに戻ってきます。 'GuardTokenInterface'は' TokenInterface'だけを実装しているので、私はそれらと何をするのかかなり混乱していました。 –
私はLexikJWTAuthenticationBundleをしばらく使いこなしていましたが、今ではそのほとんどが動作していると思いますが、私の 'AbstractGuardAuthenticator'でこれを実装する方法を混乱させています。ドキュメントでは、これらの認証ハンドラを私が使用しない 'form_login'。質問の内容を設定の詳細で更新します。 –