【问题标题】:Phoenix Cookies decryption凤凰饼干解密
【发布时间】:2023-04-05 13:23:01
【问题描述】:

使用凤凰框架: 我正在尝试读取授权插件中的 cookie。这是一个签名的 cookie,但我无法再次解密它。我如何获得它的价值?

路由器

  pipeline :api do
    plug :accepts, ["json"]
    plug :fetch_session
    plug :put_secure_browser_headers
    plug :protect_from_forgery
    plug SmiksAanvraagWeb.Plugs.Auth

  end

我的身份验证插件

  @moduledoc false
  def init(_opts) do
  end

  def call(conn, _) do
    IO.inspect conn.cookies["user"] # RESULT: SFMyNTY.g2gDbQAAAARhYWFhbgYA3I_DCncBYgANLwA.wUU0R4tdGDlFgS_o7GOEN7TqPjzLhmQNEJphJtXdEo8

【问题讨论】:

  • 为什么要直接阅读而不是使用会话机制?
  • 因为客户端提交 Ajax 调用后我的会话丢失了。
  • 你试过Phoenix.Token.verify/3 吗? Phoenix.Token.verify(YourappWeb.Endpoint, app_secret, conn.cookies["user"])
  • 我通过手动解码来让它工作,就像他们在这里解释的那样bitcrowd.dev/decoding-phoenix-session-cookies
  • 作为那篇博文的作者,我很高兴你发现它有帮助 :) @KristofvanWoensel

标签: cookies elixir phoenix-framework


【解决方案1】:

讨论有点晚了,但我们通过使用:signed 选项调用fetch_cookies/2 解决了问题,如here 所写。例如:fetch_cookies(conn, signed: ["my_cookie_name"])

查看here 的实现,fetch_cookies/2 调用verify_or_decrypt/4,将验证值放在conn.cookies 上。

这样我们就让fetch_cookies/2处理cookie的验证和解码,而不必手动进行。

这同样适用于加密的 cookie,使用 :encrypted 选项而不是 :signed 选项。

【讨论】:

    猜你喜欢
    • 2016-01-30
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-07
    相关资源
    最近更新 更多