Symfony авторизация при входе через API - PullRequest
0 голосов
/ 19 марта 2020

Итак, у меня есть 2 проекта, оба в Symfony. Один из них - наш бэкэнд (для внутреннего использования), а другой - наш веб-интерфейс (основной сайт). В нашем бэкэнде у нас работают все наши сущности и платформа API, и все, что мы делаем / нуждаемся в нашем интерфейсе, мы используем наш API.

В настоящее время я работаю над входом в систему, и в основном у нас есть сущность (называемая Contact) и эта сущность содержит адрес электронной почты, пароль и некоторые другие детали.

При входе в систему должен использоваться и API, поскольку ни одна из наших сущностей и тому подобное не находятся в нашем интерфейсе. Кто-то еще, кто начал его, очевидно, думал об использовании JWT для аутентификации.

В нашем security.yaml у нас есть следующий код для входа в систему (на нашем бэкэнде):

login:
            pattern: ^/api/login
            stateless: true
            anonymous: true
            provider: app_customer_provider
            json_login:
                check_path: /api/login_check
                username_path: email
                password_path: password
                success_handler: lexik_jwt_authentication.handler.authentication_success
                failure_handler: lexik_jwt_authentication.handler.authentication_failure

В нашем интерфейсе , У меня есть следующий код:

$response = $client->request('POST', 'http://cms.shieldingsystems.local/api/login_check', [
                'headers' => [
                    'X-AUTH-TOKEN' => 'REAL',
                ],
                'json' => $form->getData()
            ]);
            $content = json_decode($response->getContent(false));

            if (property_exists($content, 'code') && $content->code === 401) {
                $this->addFlash('danger', $content->message);
            } else {
                dump($content);
            }

Вход в систему работает нормально, он показывает ошибку, когда данные для входа в систему от правильного объекта не верны, и когда они есть, он будет сбрасывать $content. Проблема в том, что $content содержит только токен и токен refre sh.

Я знаю, что токен может быть декодирован и будет содержать пользователя. Я взял токен, расшифровал его онлайн с помощью JWT-декодера и получил следующие данные:

{
"iat":1584619604
"exp":1584623204
"roles":[]
"username":"..."
}

Как я могу сделать так, чтобы все пользовательские данные были в токене, а не только роли и логин? И нужно ли для чего-нибудь использовать токен refre sh? И если да, то как бы я это использовал?

...