2

認証に JWT を使用する symfony の API に取り組んでいます。JWT には LexikJWTAuthenticationBundle を使用し、トークンの更新には JWTRefreshTokenBundle を使用します。私がしたいのは、トークンを介してユーザーを認証し、更新トークンを与えることです。セキュリティで私は持っています:

firewalls:
        # disables authentication for assets and the profiler, adapt it according to your needs
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false

        login:
            pattern:    ^/api/login_check
            stateless:  true
            anonymous:  true
            form_login:
                check_path:               fos_user_security_check
                username_parameter:       username
                password_parameter:       password
                success_handler:          lexik_jwt_authentication.handler.authentication_success
                failure_handler:          lexik_jwt_authentication.handler.authentication_failure
                require_previous_session: false
        register:
            pattern:    ^/api/register
            anonymous:  true
            stateless:  true
        refresh:
            pattern:    ^/api/token/refresh
            stateless:  true
            anonymous:  true
        api:
            pattern:    ^/api
            provider:   fos_userbundle
            stateless:  true
            guard:
                authenticators:
                    - lexik_jwt_authentication.jwt_token_authenticator

そして、私の登録アクションの中に私は持っています:

    /**
     * @Route("/api/register")
     * @Method({"POST"})
     */
    public function registerAction(Request $request)
    {
        $userManager = $this->get('fos_user.user_manager');
        $data = $request->request->all();

        $mailValidator = $this->get('validator.email');
        $mailValidator->validate($data['email']);

        $user = $userManager->createUser();
        $user->setUsername($data['username']);
        $user->setPlainPassword($data['password']);
        $user->setEmail($data['email']);
        $user->setEnabled(true);

        $userManager->updateUser($user);

        return $this->generateToken($user, 201);
    }

    protected function generateToken(User $user, $statusCode = 200)
    {
        $token = $this->get('lexik_jwt_authentication.jwt_manager')->create($user);
        $response = array(
            'token' => $token,
            'refreshToken' => null,
            'username'  => $user->getUsername(),
            'mail'      => $user->getEmail(),
        );

        return new JsonResponse($response, $statusCode);
    }

生成アクション メソッド内で、ユーザー エンティティからトークンを作成できますが、リフレッシュ トークンも作成できません。プロバイダーには FOSUserBundle を使用します。これは login_check コントローラーです。generateToken メソッドからそのコントローラにポスト リクエストを送信しようとしましたが、成功しませんでした。どんな助けでも大歓迎です。

4

1 に答える 1