0

FOSUserBundle と JWT (LexikJWTAuthenticationBundle を使用) を使用して、ログイン機能を備えたシンプルな API を実装しました。すべて正常に動作し、ログインして jwt トークンを取得できます。しかし、ユーザーの詳細を取得するために API エンドポイントを作成すると、パスワード フィールドも応答で送信されます。

ユーザーの詳細を取得するためのコントローラー メソッドは次のようになります。

/**
 * @Route("/get/{id}", name="api_auth_get_user_by_id",  methods={"GET"})
 *
 * @param Request              $request
 * @param UserManagerInterface $userManager
 *
 * @return JsonResponse|\Symfony\Component\HttpFoundation\RedirectResponse
 */
public function getById(SystemUser $user)
{
    return $this->handleView($this->view($user));
}

私のユーザーエンティティは次のようになります。

<?php

namespace App\Entity\Api\Auth;

use Doctrine\ORM\Mapping as ORM;
use FOS\UserBundle\Model\User as BaseUser;

/**
 * @ORM\Entity
 * @ORM\Table(name="fos_user")
 */
class SystemUser extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    public function __construct()
    {
        parent::__construct();
        // your own logic
    }
}

ご覧のとおり、私のSystemUserエンティティは にあるエンティティから拡張BaseUserされていFOSUserBundleます。

これは、API からユーザーの詳細を取得したときの応答 JSON の様子です。

{
    "id": 1,
    "username": "test",
    "username_canonical": "test",
    "email": "test.user@super.com",
    "email_canonical": "test.user@super.com",
    "enabled": true,
    "password": "$2y$13$DnyFxYyJXQe3Z7chsJYwe.LUsuOWPqBtFm5.O0vwldX5AoMGld9ca",
    "last_login": "2019-08-27T06:19:43-04:00",
    "groups": [],
    "roles": []
}

では、応答からパスワード プロパティを除外するにはどうすればよいでしょうか。最新の Symfony 4.3 を使用しています。以前のバージョンの Symfony では、バンドル内のエンティティごとに jms シリアライザー構成を作成できましたが、Symfony 4 では大幅に変更されたため、バンドルを使用する必要がなくなり、この単純なアプリにはバンドルを使用していません。

4

1 に答える 1