body_entered signal only fires once (when the body enters the area) it cannot be relied upon for constant updates. You have a few other options, though:
Add a boolean that
body_entered enables and a variable to track that body, and add some
_process logic that updates the raycast with the body's position when the boolean is true. You'd also have to add a
body_exited to disable it when you leave the area.
_process logic to update the raycast to point at the first thing in
$DetectionRange.get_overlapping_bodies(). Don't forget to handle the situation where there are no overlapping bodies.
Keep in mind that in both cases, you'll have issues if there are multiple bodies that interact with the area, so you'll have to set up collision layers and masks appropriately such that the player is the only thing that ever collides with the area shape.