1

我正在为使用 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 记住我,如果没有,则会话存储)
4

1 回答 1

1

也许检查Guardian.Plug.remember_me/4 功能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 能够同时存储会话和存储令牌,因此您可能需要根据需要自定义身份验证系统。

于 2017-11-03T14:42:58.153 回答