Як побудувати кінцеву точку 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