【发布时间】:2018-06-02 04:45:40
【问题描述】:
我目前正在通过尝试制作一个小型 Plug 项目来学习 Elixir。除了会话和 CSRF 保护之外,大部分都很好。当我发出 GET 请求时,我在 Firefox 或 HTTPie 中看不到会话 cookie,当我发出 POST 请求时,我收到 500 错误(但记录器是静默的)。
这是我当前的路由器代码:
defmodule ElxSimpleApi.Web do
require Logger
use Plug.Router
import Plug.Conn
alias ElxSimpleApi.{Models, Repo}
plug Plug.Logger, log: :debug
plug Plug.Parsers, parsers: [:urlencoded, :json],
pass: ["text/*", "application/json"],
json_decoder: Poison
plug :put_secret_key_base
plug Plug.Session, store: :cookie,
key: "_elx_simple_api_session",
encryption_salt: "elxsimpleapienc",
signing_salt: "elxsimpleapisign",
log: :debug
plug :fetch_session
plug Plug.CSRFProtection
plug :match
plug :dispatch
# A bunch of routes here, omitted for clarity
match _ do
send_resp(conn, 404, "oops")
end
defp fetch_person(:int, id), do: Models.Person |> Repo.get(id)
defp fetch_person(:str, sid), do: fetch_person(:int, String.to_integer(sid))
defp ecto_to_map(struct) do
struct |> Map.from_struct |> Map.drop([:__meta__])
end
defp put_secret_key_base(conn, _) do
put_in conn.secret_key_base, "d5b2hHZGsUfcYB8lImcxooaLfVBlB5bg/z9a99jjHuXTvt7yb5neykHrYEjuNFnD"
end
end
请告诉我我做错了什么。谢谢!
更新:感谢@josé-valim 的建议,我现在知道 500 错误是由无效的 CSRF 令牌引起的。但是cookie仍然没有被设置。
【问题讨论】:
-
尝试在
use Plug.Router之后添加use Plug.Debugger,看看添加调试器是否会为您提供正确的堆栈跟踪、日志记录和一切。
标签: session csrf session-management elixir