使用 Guardian 在 Phoenix 中记住我的功能
Remember me functionality in Phoenix using Guardian
我正在为使用 Guardian 处理身份验证的 Web 应用程序开发登录系统。
在我的 Guardian 配置中,我有
ttl: {30, :days}
用户的令牌通过调用存储在 cookie 中:
defp login(conn, user) do
conn
|> Guardian.Plug.sign_in(user)
end
像这样,令牌的有效期为 30 天,即使浏览器关闭也会保留(cookie 的预期行为)。
但是,用户应该能够选择在登录期间是否被记住。
如果不是,则必须在关闭浏览器时从 cookie 中删除令牌 window。
我试过设置
ttl: {0, :days}
它似乎完成了所需的行为。表示:
- ttl: {0, :days} 是否是在浏览器 window 关闭之前验证用户身份的正确方法?如果是这样,如何在调用 Guardian.Plug.sign_in(conn, user) 之前以编程方式更改管道中的 ttl 值?
- Guardian 是否能够根据用户选择将令牌存储在 cookie 或会话存储中? (选定的 cookie 记住我,如果没有则存储会话)
也许检查 Guardian.Plug.remember_me/4
function. There's an example on Guardian's 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 非常危险,因为这意味着在登录后您的令牌已过期,因此如果您授权 every 单个 API 路由将不起作用基于令牌的请求。
Guardian 能够同时存储会话和令牌,因此您可能需要根据需要自定义身份验证系统。
我正在为使用 Guardian 处理身份验证的 Web 应用程序开发登录系统。 在我的 Guardian 配置中,我有
ttl: {30, :days}
用户的令牌通过调用存储在 cookie 中:
defp login(conn, user) do
conn
|> Guardian.Plug.sign_in(user)
end
像这样,令牌的有效期为 30 天,即使浏览器关闭也会保留(cookie 的预期行为)。 但是,用户应该能够选择在登录期间是否被记住。 如果不是,则必须在关闭浏览器时从 cookie 中删除令牌 window。 我试过设置
ttl: {0, :days}
它似乎完成了所需的行为。表示:
- ttl: {0, :days} 是否是在浏览器 window 关闭之前验证用户身份的正确方法?如果是这样,如何在调用 Guardian.Plug.sign_in(conn, user) 之前以编程方式更改管道中的 ttl 值?
- Guardian 是否能够根据用户选择将令牌存储在 cookie 或会话存储中? (选定的 cookie 记住我,如果没有则存储会话)
也许检查 Guardian.Plug.remember_me/4
function. There's an example on Guardian's 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 非常危险,因为这意味着在登录后您的令牌已过期,因此如果您授权 every 单个 API 路由将不起作用基于令牌的请求。
Guardian 能够同时存储会话和令牌,因此您可能需要根据需要自定义身份验证系统。