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