使用Guardian记住我在凤凰城的功能

时间:2017-11-03 14:19:09

标签: cookies elixir phoenix-framework remember-me guardian

我正在使用Guardian为Web应用程序开发登录系统来处理身份验证。 在我的Guardian配置中我有

ttl: {30, :days}

用户的令牌通过调用

存储在cookie中
defp login(conn, user) do
  conn
  |> Guardian.Plug.sign_in(user)
end

像这样,令牌有效期为30天,即使浏览器关闭也会保持在那里(cookie的预期行为)。 但是,用户应该能够选择在登录期间是否记住。 如果不是,则必须在关闭浏览器窗口时从cookie中删除令牌。 我试过设置

ttl: {0, :days}

它似乎完成了所需的行为。说:

  1. 是ttl:{0,:days}在浏览器窗口关闭之前验证用户的正确方法吗?如果是这样,如何在调用Guardian.Plug.sign_in(conn,user)之前以编程方式更改管道中的ttl值?
  2. Guardian能否根据用户选择在Cookie或会话存储中存储令牌? (选择的cookie记住我,会话存储,如果没有)

1 个答案:

答案 0 :(得分:1)

也许请查看Guardian.Plug.remember_me/4 function。有一个关于Guardian GitHub的例子。

# Set a "refresh" token directly on a cookie.
# Can be used in conjunction with `Guardian.Plug.VerifyCookie`
conn = MyApp.Guardian.Plug.remember_me(conn, resource)

更改TTL在这里非常危险,因为这意味着您在登录后立即使用过期令牌,因此如果您根据令牌授权请求,每个单个API路由将无效。

Guardian能够存储会话并同时存储令牌,因此您可能需要根据需要自定义身份验证系统。