【问题标题】:Remember me functionality in Phoenix using Guardian使用 Guardian 在 Phoenix 中记住我的功能
【发布时间】:2017-11-03 14:19:08
【问题描述】:

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

【问题讨论】:

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


    【解决方案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 能够同时存储会话和存储令牌,因此您可能需要根据需要自定义身份验证系统。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-07
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      • 2016-06-23
      • 2014-07-24
      相关资源
      最近更新 更多