长生不老药凤凰设置和使用环境变量



我有一个凤凰应用程序正在对github进行OAuth调用。我想将我的密钥存储为环境变量,以便将它们置于版本控制之外。

我创建了一个名为.env的文件,其中定义了我的私钥:

export GITHUB_CLIENT_ID="891538_my_key_bf0055"

我尝试在我的config.exs文件中获取我的私钥,该文件负责使用System.Config配置您的应用程序。

config :ueberauth, Ueberauth.Strategy.Github.OAuth, client_id: System.get_env("GITHUB_CLIENT_ID"), client_secret: System.get_env("GITHUB_SECRET_ID")

长话短说,我的控制器几乎能够与 github 握手请求。当我向 github 发出请求以授权我的应用程序时,http://localhost:4000/auth/github,我几乎可以提出请求,我看到来自 github 的 404 页面。我注意到该网址没有client_id

我的路由器访问回调是

scope "/auth", Discuss do
pipe_through :browser # Use the default browser stack
# make request to github, google, fb
get "/:provider", AuthController, :request
get "/:provider/callback", AuthController, :callback
end

我得到的是没有value https://github.com/login/oauth/authorize 的 URL?client_id=&redirect_uri=http%3A%2F%2Flocalhost%3A4000%2Fauth%2Fgithub%2Fcallback&response_type=code&scope=user%2Cpublic_repo'

如果我在config.exs中不使用环境变量,而是使用字符串值,则请求将正常工作。

如何在凤凰城中使用环境变量?

如果使用 Distillery 版本,您可能希望避免在config.exs文件中使用System.get_env/1,因为它将在构建时而不是运行时存储环境变量的值。

prod.exs配置中,您可以使用

config :ueberauth, Ueberauth.Strategy.Github.OAuth,
client_id: "${GITHUB_CLIENT_ID}",
client_secret: "${GITHUB_SECRET_ID}"

然后生成设置了REPLACE_OS_VARS=true环境变量的发布。

酿酒厂文档

不应用双引号将client_id字符串括起来。按原样写:

export GITHUB_CLIENT_ID=891538_my_key_bf0055

在启动服务器或IEx之前,请不要忘记source .env

如果您希望 ENV 变量仅在应用过程中保持可见,则可以将它们放在.env文件中,然后使用

env $(cat .env | grep -v ^# | xargs) iex -S mix phoenix.server

当然,在生产中,您可能想尝试一些更复杂的机制,但上述机制适用于简单/开发用例,它会让您知道您的应用程序是否正确读取了 ENV var。

对于开发 – 当按iex -S mix phx.server运行时 – 您可以在.iex.exs中设置变量:

System.put_env(%{"GITHUB_CLIENT_ID" => "891538_my_key_bf0055",
"GITHUB_SECRET_ID" => "1234567890asdfghjkls"})

相关内容

  • 没有找到相关文章

最新更新