conn.assigns
are reset on every request. If you want to store something in SessionController
and have it available in future requests, you can use put_session
;
In your SessionController:
token = Phoenix.Token.sign(conn, "user socket", user)
conn
|> put_session(:user_token, token)
|> render(...)
Then, to access it in other controllers, you can use:
token = get_session(conn, :user_token)
To access it in multiple templates, you can then add a plug to the appropriate pipeline(s) in your Router:
pipeline :browser do
...
plug :fetch_user_token
end
...
def fetch_user_token(conn, _) do
conn
|> assign(:user_token, get_session(conn, :user_token))
end
Now you can access the token in any template with @user_token
(or assigns[:user_token]
or assigns.user_token
or @conn.assigns[:user_token]
or @conn.assigns.user_token
; all will give the same result here).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…