Cześć! Ten wpis jest bezpośrednim rozszerzeniem mojego filmu na YouTube, w którym pokazuję, jak tworzyć API w Symfony i korzystać z JWT. Jeśli jeszcze go nie widziałeś, zapraszam do obejrzenia: Tutaj.
Poniżej znajduje się przewodnik krok po kroku, który pomoże Ci skonfigurować API w Symfony z wykorzystaniem JWT.
Zacznij od zainstalowania wymaganych pakietów za pomocą komend:
composer require jms/serializer-bundle
composer require friendsofsymfony/rest-bundle
composer require symfony/maker-bundle
composer require symfony/orm-pack -W
composer require lexik/jwt-authentication-bundle
Następnie skonfiguruj zmienne środowiskowe dla bazy danych w pliku .env
i utwórz bazę danych za pomocą komendy:
bin/console doctrine:database:create
Ustaw pakiet odpowiedzialny za API w pliku:
config/packages/fos_rest.yaml
Utwórz użytkownika za pomocą komendy:
bin/console make:user
Przeprowadź migrację danych za pomocą komend:
bin/console make:migration
bin/console doctrine:migrations:migrate
Wygeneruj klucze JWT za pomocą komendy:
bin/console lexik:jwt:generate-keypair
Dodaj ścieżkę logowania do pliku routes.yaml
:
api_login_check:
path: /api/login_check
Utwórz kontroler PanelController
za pomocą komendy:
bin/console make:controller
i dodaj do niego następujące adnotacje:
/**
* @Route("/api", name="api_")
*/
Skonfiguruj plik security.yaml
:
login:
pattern: ^/api/login
stateless: true
json_login:
check_path: /api/login_check
success_handler: lexik_jwt_authentication.handler.authentication_success
failure_handler: lexik_jwt_authentication.handler.authentication_failure
api:
pattern: ^/api
stateless: true
jwt: ~
access_control:
- { path: ^/api/login, roles: PUBLIC_ACCESS }
- { path: ^/api, roles: IS_AUTHENTICATED_FULLY }
Dodaj użytkownika do bazy danych z rolą ["IS_AUTHENTICATED_FULLY"]
.
Hasło możesz wygenerować za pomocą komendy:
bin/console security:hash-password
Uruchom serwer za pomocą komendy:
symfony server:start
Zaloguj się za pomocą poniższego żądania POST:
POST https://127.0.0.1:8000/api/login_check
Content-Type: application/json
{
"username": "asphp",
"password": "test1234"
}
Testuj, czy wszystko działa poprawnie, wysyłając żądanie GET:
GET https://127.0.0.1:8000/api/panel
Authorization: Bearer TOKEN
Mam nadzieję, że ten przewodnik okaże się przydatny!