使用API​​的Symfony登录身份验证

时间:2020-03-19 12:28:33

标签: php symfony jwt jwt-auth lexikjwtauthbundle

所以我有两个项目,都在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仅包含一个令牌和一个刷新令牌。

我知道令牌可以被解码并包含用户。我拿了令牌,使用JWT解码器在线对其进行了解码,并得到了以下数据:

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

如何使所有用户数据不仅包含角色和用户名,而且包含在令牌中? 我是否需要对任何事物使用刷新令牌?如果是这样,我将如何使用它?

0 个答案:

没有答案