私は私ののsecurity.ymlファイル内に2つのファイアウォールがあります。私は、POSTで/api/v1/auth
にPOSTリクエストを送信しJWTとルートSymfony3
/**
* @param ParamFetcherInterface $paramFetcher
*
* @Rest\Post("/auth")
* @Rest\RequestParam(name="email", strict=true)
* @Rest\RequestParam(name="password", strict=true)
*
* @return array
*/
public function postTokenAuthAction (ParamFetcherInterface $paramFetcher)
{
if($user = $this->getUser()) {
return $user->getRoles();
}
$email = $paramFetcher->get('email');
$password = $paramFetcher->get('password');
/** @var User|null $user */
$user = $this->getDoctrine()->getRepository('AppBundle:User')->findOneByEmail($email);
if(!$user || !$this->get('security.password_encoder')->isPasswordValid($user, $password)) {
throw new HttpException(403, $this->get('translator')->trans('auth.error'));
}
$token = $this->get('lexik_jwt_authentication.encoder')->encode([
'email' => $user->getEmail()
]);
return ['access_token' => $token];
}
/**
* @param ParamFetcherInterface $paramFetcher
*
* @Rest\Post("/auth/check")
*
* @return array
*/
public function postCheckLoginAction (ParamFetcherInterface $paramFetcher)
{
/** @var User $user */
$user = $this->getUser();
if (!$user) {
throw $this->createAccessDeniedException();
}
return $user->getRoles();
}
:AuthControllerで
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
providers:
fos_userbundle:
id: fos_user.user_provider.username_email
firewalls:
login:
pattern: ^/api/v1/auth$
stateless: true
anonymous: true
provider: fos_userbundle
form_login:
check_path: /api/v1/auth
success_handler: lexik_jwt_authentication.handler.authentication_success
failure_handler: lexik_jwt_authentication.handler.authentication_failure
require_previous_session: false
api:
pattern: ^/api/v1
stateless: true
provider: fos_userbundle
guard:
authenticators:
- lexik_jwt_authentication.jwt_token_authenticator
そして、二つの経路をget access_tokenのパラメータはemail=&password=
です。しかし、私は401エラー "不正な資格情報"を得た。
次に、login
ファイアウォールのパラメータpattern
を^/api/v1/auth
に、form_login.check_path
を/api/v1/auth/check
に変更しました。うまくいきます。 メールとパスワードでログインし、access_tokenを取得できます。
しかし、/api/v1/auth/check
ルートは不正な資格情報を返すようになりました。このルートでメールとパスワードで私を認証しようとしていますが、私は承認ヘッダーで認証しようとします。
なぜうまくいかないのですか?
は最終的に、私はaccess token
を取得するため/api/v1/auth
にemail
とpassword
を送信し、次の/api/v1/auth/check
にaccess_token
を送信し、ユーザの役割を取得します。
メール=&パスワードの作品を期待 - それは私が知っているGETメソッドの構文 – Fky
です。それは疑問の例です。 POST本体にこのパラメータを送ります。 –
どのバージョンのjwtを使用していますか? – LBA