symfony - 为 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');
}
}
解决方案
问题解决了,我终于添加了一个带有默认路由“/”的 DefaultController,它抛出了 NotFoundException。
推荐阅读
- angular - Angular 6 项目在 Chrome 中运行良好,但在 IE11 中运行良好
- java - 数据库无法启动:DB [database] 'v3.4.0' 以状态 'KILLED' 退出。在 Neo4j 中
- css - Powr 表单 CSS 自定义(按钮和验证码对齐)
- ddev - 无法清除临时安装目录
- ssl - SSL握手时入口NGINX客户端关闭连接
- node.js - Nodejs Express 车把如何在没有模板的情况下将 .hbs 包含在另一个 .hbs 中
- python - 如何在学习期间中断训练并获得权重?
- excel - 如何获得具有在特定行条件下“重新开始”的动态范围的运行公式?
- python - 使用 numpy 等索引从张量中提取
- c++ - 比较两个 std::strings 以查看它们是否匹配 c++