Home > other >  How to stop further routing in a plug?
How to stop further routing in a plug?

Time:10-11

I'm using Phoenix, and in router.ex, I have defined a function that verifies the user's JWT token, before continuing on to routing through the api, in order to protect the routes. However, I am having the issue that if, say, I return a status of 403 in the plug, it continues routing and I end up getting an error as I am both accessing the route and disallowing access.

My code looks something like this:

def validate(conn, _opts) do
  if !Map.has_key?(conn.cookies, "jwt") do
    conn
    |> send_resp(403, "Forbidden")
    # I would like to have something here that stops further
    # routing - i.e. a way to say 'already sent a response; don't keep going'
  end
end

CodePudding user response:

Here is an excerpt from Plug.Conn.send_resp/3

Note that this function does not halt the connection, so if subsequent plugs try to send another response, it will error out. Use halt/1 after this function if you want to halt the plug pipeline.

  • Related