Tôi có một tình huống mà tôi cần chạy một số mã nếu người dùng cố truy cập một URL được bảo vệ và là không phải là được xác thực/ủy quyền.Có thể xem liệu URL/tuyến đường có được bảo vệ sau tường lửa theo chương trình không?
Theo mặc định, Symfony xử lý người dùng chưa được xác thực bằng cách chuyển hướng hoặc chuyển tiếp người dùng đến biểu mẫu đăng nhập. Tôi muốn ngăn chặn điều này xảy ra nếu phương thức yêu cầu là POST, và thay vào đó là echo một đối tượng JSON.
Cách tốt nhất tôi có thể nghĩ ra để xử lý này là để tạo ra một người biết lắng nghe tùy chỉnh mà lắng nghe sự kiện kernel.request
và kiểm tra hai điều:
- kiểm tra nếu các phương thức yêu cầu là POST
- kiểm tra nếu người dùng được hoàn toàn được xác thực
Nếu đó là yêu cầu POST và người dùng chưa được xác thực đầy đủ, tôi sẽ lặp lại đối tượng JSON.
Nhưng người nghe của tôi (dự kiến) sẽ kích hoạt tất cả các yêu cầu - Tôi muốn giới hạn nó chỉ để kiểm tra xem yêu cầu có được URL bảo vệ bởi tường lửa hay không. Có thể kiểm tra chương trình này không?
Tôi cũng có một sự nghi ngờ cằn nhằn có một cách đơn giản hơn để đi về việc này, nhưng không thể tìm ra nó, vì vậy nếu có ai có bất cứ lời khuyên, tôi muốn nghe họ :)
Sửa
@Problematic - Lý do chỉ kiểm tra các yêu cầu tường lửa là vì tôi có một số yêu cầu không được tường lửa và nếu mã của tôi bị kích hoạt, tôi sẽ nhận được đối tượng JSON nói trên thay vì phản hồi thực của yêu cầu.
Ngay bây giờ nếu tôi không đăng nhập và gửi yêu cầu POST đến api/get/something
(phía sau tường lửa), Symfony trả về HTML mô tả trang đăng nhập. Thay vào đó, tôi muốn chỉ echo một cái gì đó như {error: 'User is not authorized'}
. Nhưng tôi chỉ muốn điều này xảy ra cho các yêu cầu POST.
Lý do chỉ kiểm tra các yêu cầu được tường lửa là gì? – Problematic
@Problematic, xin vui lòng xem chỉnh sửa của tôi –