使用Ueberauth、Elixir、Phoenix对接Github OAuth时出现404错误
首先,从你提供的跳转链接能一眼看出核心问题:client_id参数是空的!Github的OAuth授权页面需要有效的client_id来识别你的应用,空值会直接导致404。终端的302状态码只是Phoenix在正常执行重定向操作,但因为参数缺失,目标页面无法访问。
下面是一步步的排查和修复方案:
检查Ueberauth Github的配置
确保你在项目的配置文件(比如config/runtime.exs或者config/config.exs)里正确配置了Github OAuth的client_id和client_secret。推荐用环境变量存储敏感信息,配置示例如下:config :ueberauth, Ueberauth.Strategy.Github.OAuth, client_id: System.get_env("GITHUB_CLIENT_ID"), client_secret: System.get_env("GITHUB_CLIENT_SECRET")注意:不要把真实的client_id和secret硬编码到配置文件里,避免敏感信息泄露。
验证环境变量是否正确加载
很多时候问题出在环境变量没被正确读取。你可以启动项目的iex控制台,输入System.get_env("GITHUB_CLIENT_ID"),看看是否返回你在Github OAuth应用里获取到的client_id。如果返回nil,说明环境变量没设置好:- 如果你用终端启动Phoenix,先在终端执行
export GITHUB_CLIENT_ID=你的client_id和export GITHUB_CLIENT_SECRET=你的secret,再启动项目; - 如果你用dotenv工具(比如
dotenv_elixir),确保.env文件里正确写入了这两个变量,并且项目依赖已经安装。
- 如果你用终端启动Phoenix,先在终端执行
确认Github OAuth应用的配置
登录Github的开发者设置,找到你创建的OAuth应用,检查两个关键点:Client ID是否和你配置的一致;Authorization callback URL是否完全匹配你跳转链接里的redirect_uri(也就是http://localhost:4000/auth/github/callback),大小写、端口、路径都不能错。
检查Phoenix路由配置
确保你的路由里正确挂载了Ueberauth的路由,示例如下:scope "/auth", MyAppWeb do pipe_through :browser get "/:provider", AuthController, :request get "/:provider/callback", AuthController, :callback end这里的
AuthController需要实现request/2和callback/2动作,但当前的404问题和控制器逻辑无关,先确保配置正确后再验证控制器。
按照上面的步骤排查,优先解决client_id为空的问题,应该就能正常跳转到Github的授权页面了。
内容的提问来源于stack exchange,提问作者Matthew




