Elixir / Phoenix更改会话密钥

时间:2016-06-25 08:10:33

标签: session elixir phoenix-framework elixir-framework

我有会话,这些会话是在用户登录时生成的:

defp sign_in(user, password, conn) do
   if password == user.password do
     conn
     |> put_session(:current_user, %{id: user.id, username: user.username, role_id: user.role_id, language: 1})
     |> put_flash(:info, "Signed in successfully!")
     |> redirect(to: page_path(conn, :tableshow))
   else
   failed_login(conn)
   end
end

和一个键“语言”,默认情况下在登录时分配给1。但是,在layout / app.html.eex的标题中,我正在尝试创建一个按钮来更改键的值“语言“到2.如何更改密钥的值?我已经阅读了Plug.Conn,但仍然不确定:(基本上,我想要语言切换,所以如果会话“语言”键是1,它将是英语,如果2,中文。 提前致谢!

1 个答案:

答案 0 :(得分:1)

由于会话变量:current_user只是一个地图,您需要使用语法

根据需要更新地图
update_map = %{current_map | :key_to_update => value}

单击该按钮时,只需在控制器操作中执行此操作。

conn = put_session(conn, :current_user, 
%{get_session(conn, :current_user) | language: lang_value})