首页 > 解决方案 > 为 API 配置防火墙

问题描述

我正在尝试使用身份验证系统开发 API。但是我的默认路由的响应 / 总是显示 Symfony 默认欢迎页面的源代码,而不是找不到路由或需要身份验证。我的配置有什么问题。

我的 security.yaml 文件

security:
    encoders:
        App\Entity\User:
            algorithm: auto

    providers:
        app_user_provider:
            entity:
                class: App\Entity\User
                property: email

    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            pattern: ^/
            anonymous: true
            json_login:
                check_path: /api/login
            logout:
                path: /api/logout
                success_handler: api.logout.success.listener

    access_control:
        - { path: ^/, roles: IS_AUTHENTICATED_FULLY }

我的安全控制器

/**
 * @Route("/api")
 */
class SecurityController extends AbstractController
{
    /**
     * @Route("/", name="api", methods={"GET"})
     * @param Request $request
     * @return JsonResponse
     */
    public function test(Request $request)
    {
        return $this->json([
            'message' => 'test'
        ]);
    }

    /**
     * @Route("/login", name="login", methods={"POST"})
     * @param Request $request
     * @return JsonResponse
     */
    public function login(Request $request)
    {
        $user = $this->getUser();

        return $this->json([
            'username' => $user->getUsername(),
            'roles' => $user->getRoles(),
        ]);
    }

    /**
     * @Route("/logout", name="logout", methods={"GET"})
     * @throws Exception
     */
    public function logout()
    {
        // controller can be blank: it will never be executed!
        throw new Exception('Don\'t forget to activate logout in security.yaml');
    }
}

标签: symfonysymfony4

解决方案


问题解决了,我终于添加了一个带有默认路由“/”的 DefaultController,它抛出了 NotFoundException。


推荐阅读