elixir - 使用 Ueberauth 不断收到 Cross-Site Request Forgery 错误
问题描述
我正在使用 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 进行了身份验证,没有任何问题或其他策略。在找到解决方案之前,我在对您的问题留下的评论中使用了该应用程序。
推荐阅读
- shell - 遍历特定目录中的每个文件
- php - 私有成员变量必须带有下划线前缀
- bash - 脚本出于未知原因创建文件
- android - 带有两个非 0 小数的双精度的 Android Studio 错误
- database - Oracle 12c 无法使用 sqlplus 连接数据库
- java - 复制后 Amazon S3 Java SDK copyObject 权限被拒绝
- r - 卸载 R 包并释放内存
- java - 当我的查询满足预期条件时,如何使用 JSON PATH 获取整个 json 对象
- angular - 使用 rxjs 对添加到 Firestore 集合的自定义属性进行排序/分组
- javascript - 我想在 html 页面中添加弹出窗口。示例位于 www.pu.edu.pk(在线录取)