【发布时间】:2021-08-06 21:58:06
【问题描述】:
我使用的是 Phoenix 1.3 版和 UeberAuth "~> 0.6"。我目前收到一个我认为不应该发生的 CRSF 错误,但我很可能会出错。
在我的 router.ex 文件中,我有以下内容:
scope "/auth", DiscussWeb do
pipe_through :browser
get "/:provider", AuthController, :request
get "/:provider/callback", AuthController, :callback
end
在我的控制器文件中,回调如下:
def callback(conn, params) do
callback_t(conn, params)
conn
|> put_flash(:info, "Github Authenticate?")
|> redirect(to: Routes.topic_path(conn, :index))
end
defp callback_t(conn, params) do
IO.puts "+++"
IO.inspect(conn.assigns)
IO.puts "+++"
IO.inspect(params)
IO.puts "+++"
end
在浏览器中,我确实被重定向到 GitHub 进行登录。但是,我得到以下响应:
debug] Processing with DiscussWeb.AuthController.callback/2
Parameters: %{"code" => "908a69a812c17af0ab0b", "provider" => "github"}
Pipelines: [:browser]
+++
%{
ueberauth_failure: %Ueberauth.Failure{
errors: [
%Ueberauth.Failure.Error{
message: "Cross-Site Request Forgery attack",
message_key: :csrf_attack
}
],
provider: :github,
strategy: Ueberauth.Strategy.Github
}
}
+++
%{"code" => "908a69a812c17af0ab0b", "provider" => "github"}
+++
[info] Sent 302 in 4ms
[info] GET /
这是预期的吗?看起来我实际上已经登录了,因为如果我在浏览器中尝试同样的事情,我不必登录到 GitHub。但是,还有一个 CRSF 失败,我不确定如何处理,也无法从 conn.assigns 变量中获取我需要的信息。
任何帮助或建议将不胜感激!
【问题讨论】:
-
我和你面临同样的问题,100% 相同。因此,我尝试使用 Google API 进行 OAuth,并且成功了。我创建了开发帐户,我得到了重定向并且没有 CSRF 问题。所以我认为 GitHub 配置有一些东西。至于 Github,我尝试添加策略
github: {Ueberauth.Strategy.Github, [ignores_csrf_attack: true]}但没有帮助。我也尝试设置 POST 而不是 GET 但再次没有运气。将此 repo 作为测试区域,看看它是如何工作的 Überauth Example。希望它有点帮助。如果我找到 Github 的修复程序,我会回来的。干杯!