michaeljones

michaeljones

I’ve got the following admin-only endpoint to change the building_id for the current session:

  @spec switch_building(Plug.Conn.t(), map) :: Plug.Conn.t()
  def switch_building(conn, %{"building_id" => building_id}) do
    building = Building.get!(building_id)

    conn
    # Set the session building appropriately
    |> Plug.Conn.put_session("building_id", building.id)
    |> render("switch_building.html", target_building: building)
  end

But it doesn’t seem to be working. If I hit that page and then go to another the building_id in the session is the old one. It is a get request. I’ve also tried with |> Plug.Conn.configure_session(renew: true) before & after the put_session line. I don’t seem to understand how it is meant to work?

I’ve got a building_check “guard” plug in which I’m pulling the value out of the session again on the next request which has the following lines:

  def building_check(%Plug.Conn{assigns: %{current_user: current_user}} = conn, _opts) do
    building_id = Plug.Conn.get_session(conn, :building_id)
    ....

Can anyone help me understand what I’m doing wrong?

Showing Posts 1 to 3

dimitarvp

dimitarvp

Been a while since I last used it directly but why do you have the name of your parameter as a string and as an atom? I doubt that they are equivalent.

lucaong

lucaong

You are setting the session as "building_id" (string) but reading it as :building_id (atom).

EDIT: @dimitarvp beat me in time :stuck_out_tongue:

michaeljones

michaeljones OP

Thank you for spotting that. Unfortunately I think that session API converts everything to strings so that shouldn’t be an issue. I agree it should be consistent though!

You have helped me to re-examine my code though and realise that the route I was heading to next set the building_id again and then redirected so the changes were working but were being undone.

Thank you for your time and sorry that it was a foolish mistake on my part.

— All posts loaded —

Where Next? Top

Trending in Questions Top

katta
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
nseaSeb
Hello, I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New
achenet
Hello, I’m trying to build a basic Phoenix web-app, and I’d like to use Tailwind. However, when I launch mix phx.server, I get an error...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New
budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews