【问题标题】:Elixir/Phoenix changing session keyElixir/Phoenix 更改会话密钥
【发布时间】:2016-06-25 17:26:58
【问题描述】:

我有会话,在用户登录时生成:

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,中文。 提前致谢!

【问题讨论】:

    标签: session phoenix-framework elixir


    【解决方案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})
    

    【讨论】:

    • 您好,谢谢您的回复。但是我有一个问题,我需要这个按钮在所有页面的标题中,并将它放在 layout/app.html.eex 中,那么我应该使用哪个控制器?我了解如何使用控制器操作值,但由于我在 app.html.eex 中需要它,我不确定要使用哪个控制器。你能推荐一下吗?
    • 我建议你创建一个名为session controller的新控制器,并将你的控制器动作放在那里,你可以将你的控制器动作命名为change_language
    猜你喜欢
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 2017-02-14
    • 2018-03-17
    • 1970-01-01
    相关资源
    最近更新 更多