Я работаю над проектом платформы API Symfony 4 и имею клиентский проект Symfony 4, с которым я хочу войти в API. Я использую жужжание для доступа к ресурсам API.
Вот, например, реализованный мной GuzzleTrait:
<?php
/**
* Created by PhpStorm.
* User: simslay
* Date: 15/12/2018
* Time: 15:29
*/
namespace App\Controller;
use GuzzleHttp\Client;
trait GuzzleTrait
{
private $client;
public function __construct()
{
$this->client = new Client([
'base_uri' => 'http://127.0.0.1:8001'
]);
}
private function getContent(string $finUri) {
$content = null;
try {
$dataContent = $this->client->request('GET', 'api/'.$finUri);
$content = json_decode($dataContent->getBody()->getContents(), true);
} catch(\GuzzleHttp\Exception\GuzzleException $e) {
$this->addFlash(
'danger',
$e->getMessage()
);
}
return $content;
}
}
Я работаю над этим руководством: Внедрение аутентификации JWT в ваше приложение платформы API
и использовать ту же логику в моем API.
Кроме того, вот мой клиент security.yaml:
security:
# https://symfony.com/doc/current/security.html#where-do-users-come-from-user-providers
encoders:
App\Entity\User: bcrypt
providers:
in_memory: { memory: ~ }
user_provider:
entity:
class: App\Entity\User
property: surnom
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
anonymous: true
# activate different ways to authenticate
# http_basic: true
# https://symfony.com/doc/current/security.html#a-configuring-how-your-users-will-authenticate
# form_login: true
# https://symfony.com/doc/current/security/form_login_setup.html
form_login:
login_path: security_connexion
check_path: security_connexion
username_parameter: _surnom
password_parameter: _password
default_target_path: index
provider: user_provider
logout:
path: /deconnexion
target: /
# Easy way to control access for large sections of your site
# Note: Only the *first* access control that matches will be used
access_control:
- { path: ^/admin, roles: [ROLE_ADMIN, ROLE_SUPER_ADMIN] }
# - { path: ^/profile, roles: ROLE_USER }
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
У меня есть база данных API с сущностью User.
Обязательно ли иметь объект User на стороне клиента?
В curl для входа в систему у меня есть команда:
curl -X POST -H "Content-Type: application/json" http://localhost:8000/login_check -d '{"username":"johndoe","password":"test"}'
Как войти в API из клиента Symfony 4?
Спасибо за ваш ответ. Я немного понимаю, что вы говорите. Но где мне кодировать свой запрос http://localhost:8000/login_check на стороне клиента? Может быть, в действии контроллера для входа в систему? У вас есть пример кода?
хм, но обычно вы создаете API, так что вы, вероятно, являетесь клиентской стороной, чтобы потреблять apy, где вы хотите вызвать login_check bah voila





Я смог реализовать аутентификацию клиента после этого пример кода из этого руководство:.
Вам действительно нужно иметь валидный токен JWT, который вы собираетесь использовать в качестве ключа, позволяющего аутентифицироваться, вам необходимо настроить брандмауэр api и раздел защиты, как это упоминается в туто. Вы можете работать с любым jwt php beblio. вам не обязательно иметь объект User на стороне клиента, но рекомендуется создать javascript dto, в котором вы можете привязать свои данные.