文書化されたセットアップで API プラットフォームをセットアップしようとしています。
https://api-platform.com/docs/core/jwt/
次の方法でフィクスチャをロードしました。
#src/DataFixtures/AppFixtures.php
private function loadUsers(ObjectManager $manager)
{
$users = $this->getUserData();
foreach ($users as $user) {
$_user = new User();
$_user->setUsername($user['username']);
$_user->setPassword($user['password']);
$_user->setEmail($user['email']);
$_user->setPassword($this->passwordEncoder->encodePassword($_user, $user['password']));
$manager->persist($_user);
}
$manager->flush();
}
private function getUserData()
{
$users = array(
['first_name'=>'John','last_name'=>'Doe','username'=>'johndoe','email'=>'johndoe@gmail.com','password'=>'test'],
return $users;
}
私の security.yml は次のようになります。
security:
encoders:
App\Entity\User:
algorithm: bcrypt
role_hierarchy:
ROLE_READER: ROLE_USER
ROLE_ADMIN: ROLE_READER
providers:
jwt_user_provider:
entity:
class: App\Entity\User
firewalls:
login:
pattern: ^/api/login
stateless: true
anonymous: true
form_login:
check_path: /api/login_check
success_handler: lexik_jwt_authentication.handler.authentication_success
failure_handler: lexik_jwt_authentication.handler.authentication_failure
require_previous_session: false
api:
pattern: ^/api
stateless: true
guard:
authenticators:
- lexik_jwt_authentication.jwt_token_authenticator
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
access_control:
- { path: ^/api/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/api, roles: IS_AUTHENTICATED_FULLY }
今、私はトークンを取得しようとします:
curl -X POST http://localhost:8000/api/login_check -d _username=johndoe -d _password=test
しかし、非json応答を取得しています。どこかでメッセージを見つけます:
my-imac:project-folder measauser$ curl -X POST http://localhost:8000/api/login_check -d _username=johndoe@gmail.com -d _password=test
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="robots" content="noindex,nofollow" />
<meta name="viewport" content="width=device-width,initial-scale=1" />
<title> Failed to load private key "/Users/measauser/Sites/project-folder/config/jwt/private.pem":
06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt
0906A065:PEM routines:PEM_do_header:bad decrypt (500 Internal Server Error)
これは私の .env ファイルです:
###> lexik/jwt-authentication-bundle ###
# Key paths should be relative to the project directory
JWT_PRIVATE_KEY_PATH=config/jwt/private.pem
JWT_PUBLIC_KEY_PATH=config/jwt/public.pem
JWT_PASSPHRASE=42761e3ad1eb66faf082ac0763e46a2d
###< lexik/jwt-authentication-bundle ###
1) このメッセージが実際に json にないのはなぜですか?
2) なぜこのエラーが発生するのですか?
3) ブラウザに {"code":401,"message":"JWT Token not found"} というメッセージが表示されるため、ドキュメントにアクセスできません。
誰か助けてくれませんか?
更新: 2) の場合、.env の JWT_PASSPHRASE が、入力したパスフレーズと正しく一致していないようです。ということで、この部分は解決しました。