Как построить точку конечную точку JSON аутентификации

Дата обновления перевода 2023-07-06

Как построить точку конечную точку 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