Do you change can_fire elsewhere ?
By the way you can change your code to remove the yield.
Create a timer named cooldown with oneshot set to true and just start it from your fire function with your fire_rate parameters and check for timer end to allow shooting again.
if Input.is_action_pressed("Shoot") and $cooldown.time_left == 0:
Maybe it will solve your problem