Alia
Guardian Library issue - (Plug.Conn.AlreadySentError) the response was already sent
Hey everyone!
Actually i am getting following error in Elixir Guardian library. I tried many solutions and double check my code but everything seems ok. I don’t know where the problem is ![]()
error] #PID<0.635.0> running SportsconnectWeb.Endpoint (connection #PID<0.634.0>, stream id 1) terminated
Server: localhost:4000 (http)
Request: POST /api/users/posts/comments/reply
** (exit) an exception was raised:
** (Plug.Conn.AlreadySentError) the response was already sent
(phoenix 1.6.13) lib/phoenix/controller.ex:529: Phoenix.Controller.put_new_layout/2
(sportsconnect 0.1.0) lib/sportsconnect_web/controllers/comments_controller.ex:1: SportsconnectWeb.CommentsController.phoenix_controller_pipeline/2
(phoenix 1.6.13) lib/phoenix/router.ex:354: Phoenix.Router.__call__/2
(sportsconnect 0.1.0) lib/plug/error_handler.ex:80: SportsconnectWeb.Router.call/2
(sportsconnect 0.1.0) lib/sportsconnect_web/endpoint.ex:1: SportsconnectWeb.Endpoint.plug_builder_call/2
(sportsconnect 0.1.0) lib/plug/debugger.ex:136: SportsconnectWeb.Endpoint."call (overridable 3)"/2
(sportsconnect 0.1.0) lib/sportsconnect_web/endpoint.ex:1: SportsconnectWeb.Endpoint.call/2
(phoenix 1.6.13) lib/phoenix/endpoint/cowboy2_handler.ex:54: Phoenix.Endpoint.Cowboy2Handler.init/4
(cowboy 2.9.0) /home/dev/sportsconnect/deps/cowboy/src/cowboy_handler.erl:37: :cowboy_handler.execute/2
(cowboy 2.9.0) /home/dev/sportsconnect/deps/cowboy/src/cowboy_stream_h.erl:306: :cowboy_stream_h.execute/3
(cowboy 2.9.0) /home/dev/sportsconnect/deps/cowboy/src/cowboy_stream_h.erl:295: :cowboy_stream_h.request_process/3
(stdlib 4.0.1) proc_lib.erl:240: :proc_lib.init_p_do_apply/3
Marked As Solved
adamu
The Programming Phoenix book has a chapter where it walks you through setting up user authentication.
There’s also phx.gen.auth.
Also Liked
benwilson512
Hi Alia, if you do not show your code we can’t really help you.
kwando
As you said yourself, you have to use Plug.Conn.halt/1 otherwise plug will continue to process the other plugs that come after.
send_response does not halt / end your plug pipeline ![]()
adamu
This is not the right way to use Guardian. You should use the EnsureAuthenticated plug to ensure they are signed in, and handle any errors in your AuthErrorHandler.
However, it looks like you are only storing the user id in the token, in which case you can probably remove Guardian completely and just store the user id directly in the session, avoiding all the complexity and indirection that comes with using Guardian.
benwilson512
conn = Plug.Conn.put_session(conn, :user_id, user.id)
benwilson512
The session is stored, encrypted, in the browser. The code I wrote saves it, that’s all you have to do.
user_id = Plug.Conn.get_session(conn, :user_id)
The session cookie is encrypted by Phoenix and can be trusted, the end user is not able to set the user_id








