我正在开发一个香草 Elixir / Phoenix 应用程序,并按照Programming Phoenix书中的一般步骤来实现基本的登录和注销系统(参见下面的片段)。但是,我在书中或在线上没有看到关于如何设置基于 cookie 的插件会话在一定时间后过期的建议。Phoenix 应用程序中的会话超时有哪些方法?
这是我的基本身份验证系统的一些相关片段:
在endpoint.ex
中,应用程序被配置为使用基于 cookie 的只读会话:
plug Plug.Session,
store: :cookie,
key: "_zb_key",
signing_salt: "RANDOM HEX"
我写了一个插件auth.ex
(除其他外)可以登录经过身份验证的用户,并且可以current_user
根据user_id
后续请求中找到的会话进行设置:
def login!(conn, user) do
conn
|> assign(:current_user, user)
|> put_session(:user_id, user.id)
|> configure_session(renew: true)
end
# ... more ...
def load_current_user(conn, _opts) do
cond do
conn.assigns[:current_user] ->
conn # If :current_user was already set, honor it
user_id = get_session(conn, :user_id) ->
user = Zb.Repo.get!(Zb.User, user_id)
assign(conn, :current_user, user)
true ->
conn # No user_id was found; make no changes
end
end
# ... more ...