如何让put_session更长?

时间:2016-01-10 22:15:26

标签: session authentication phoenix-framework

我正在尝试我的第一个玩具应用程序,并使用了#34; Programming Phoenix"创建身份验证。这是我在session_controller中创建的方法(用于登录):

def create(conn, %{"user" => user_params}) do
  changeset = User.registration_changeset(%User{}, user_params)
  case Repo.insert(changeset) do
    {:ok, user} ->
      conn
      |> Myapp.Auth.login(user)
      |> put_flash(:info, "User created!")
      |> redirect(to: user_path(conn, :index))
  ...
end

而且,我的登录方法:

def login(conn, user) do
  conn
  |> assign(:current_user, user)
  |> put_session(:user_id, user.id)
  |> configure_session(renew: true)
end

一切正常,但我每次关闭浏览器时都需要登录。有扩展put_sesssion / assign的方法吗?我搜索了不同的身份验证实现,问题以及Elixir / Phoenix文档,但没有成功。

谢谢!

2 个答案:

答案 0 :(得分:1)

您想要的是会话cookie在关闭浏览器时存在吗?在这种情况下,您可以使用engpoint.ex中的max_age参数设置生命周期。

LIB / MYAPP / endpoint.ex:

plug Plug.Session,
  store: :cookie,
  key: "xxxxxx",
      .
      .
  max_age: 86400

答案 1 :(得分:0)

我没有找到延长会话时间的方法。我可以试着指出一个可能的解决方案。一旦浏览器关闭,会话结束,但通过“Phoenix.Token”和Cookies,您仍然应该在重新打开网站时登录。检查此问题的答案:Implementing remember-me in phoenix

希望这是解决问题的另一种方法。