Як побудувати кінцеву точку JSON аутентифікації
Дата оновлення перекладу 2023-06-15
Як побудувати кінцеву точку JSON аутентифікації
У цьому записі ви побудуєте кінцеву точку JSON для входу ваших користувачів у систему. Звичайно, коли користувач виконує вхід, ви можете завантажувати своїх користувачів звідки завгодно - наприклад, DB. Дивіться , щоб дізнатися більше.
Для початку, підключіть вхід JSON у вашому брандмауері:
1 2 3 4 5 6 7 8 9
# app/config/security.yml
security:
# ...
firewalls:
main:
anonymous: ~
json_login:
check_path: /login
Tip
check_path
також може бути іменем маршруту (але не може мати
обов'язкових символів узагальнення - наприклад, /login/{foo}
де
foo
не має значення за замовчуванням).
Тепер, коли до URL /login
буде зроблено запит, система безпеки
ініціює процес аутентифікації. Вам просто треба сконфігурувати маршрут,
що збігається з цим шляхом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
// src/AppBundle/Controller/SecurityController.php
// ...
use Symfony\Component\HttpFoundation\Request;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
class SecurityController extends Controller
{
/**
* @Route("/login", name="login")
*/
public function loginAction(Request $request)
{
}
}
Не дайте цьому порожньому контролеру збентежити вас. Коли ви відправляєте запит POST
до URL /login
з наступним JSON-документом в якості тіла, система безпеки
зупиняє запити. Вона піклується про аутентифікацію користувача з відправленим
ім'ям користувача та паролем або запускає помилку в разі невдачі процесу аутентифікації:
1 2 3 4
{
"username": "dunglas",
"password": "MyPassword"
}
Якщо JSON-документ має іншу структуру, ви можете вказати шлях для доступу
до властивостей username
і password
, використовуючи ключі username_path
і
password_path
(вони за замовчуванням username
і password
відповідно).
Наприклад, якщо JSON-документ має таку структуру:
1 2 3 4 5 6 7 8
{
"security": {
"credentials": {
"login": "dunglas",
"password": "MyPassword"
}
}
}
То конфігурація безпеки має бути:
1 2 3 4 5 6 7 8 9 10 11
# app/config/security.yml
security:
# ...
firewalls:
main:
anonymous: ~
json_login:
check_path: login
username_path: security.credentials.login
password_path: security.credentials.password