使用Ueberauth不断获取跨站点请求伪造错误



我使用的是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变量中获得我需要的信息。

如有任何帮助或建议,我们将不胜感激!

将mix.exs文件中的ueberauth_github更新为最新版本,如{:ueberauth_github, "~> 0.8"},然后运行mix.deps update(您可以使用mix.deps clean进行干净的启动)。在此之后,我使用Github进行了身份验证,没有任何问题或其他策略。在找到解决方案之前,我在对你的问题留下的评论中使用了该应用程序。

我不得不使用旧版本的Ueberuth和Ueberuth_Github才能使其正常工作:

mix.exs文件中的我的deps:

{:ueberauth, "~> 0.6.0"},
{:ueberauth_github, "~> 0.7.0"},

最新更新