Session not available when opening a new tab

I have defined an authentication pipeline like so in my routers.ex file which go through the Authenticate plug I have defined in my plugs directory

pipeline :authentication do
    plug MyAppWeb.Plugs.Authenticate
end

And in the call function of this plug I’m conditionally setting the current_user inside the session like so:

def call(conn, default) do
  current_user = authenticate_user(conn.params, conn |> get_session(:current_user))
  conn |> put_session(:current_user, current_user)
end

This does the authentication part for me and the private routes are only available if current_user exists in the session.
While this works, when I open a new tab I have go through the authentication part all over again to get the current_user in the session.

How do, in general, make the session I’ve set in a tab I’m currently on available in all the new tabs that might open?

Which browser(s) this is happening in? You are sure you are not using Firefox with the thing that isolates tabs on?

It is not browser specific as such. The session is not available when I open a new tab once it has already been set. I tried it with different browsers.
Once authenticated, the session is only available in the tab it was set on.

So you go to second tab and it presents you with login page?

If this happens, and you refresh your original tab - are you still signed in there?

Yes, If I refresh that tab, I’m still signed in. But when I open a new tab I’m not signed in

Huh. I’m out of ideas.

I figured it out. Sorry about this :sweat_smile:

Looks like it is available in all tabs. In one of the tabs I had it open on 127.0.0.1:4000 and in all the other tabs that I was opening I had it open on localhost:4000

even though they point to the same process, they are essentially different domain names. and session cookies are domain name specific.

Thanks for the help :+1:

1 Like

Ah yes, that would do it. Glad you figured it out!