2017-06-13 63 views
2

我有一个凤凰应用程序,正在对github进行OAuth调用。我想将我的密钥存储为环境变量,因此我可以将它们保留在版本控制之外。Elixir凤凰设置和使用环境变量

我创建了一个名为.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页面。我注意到,虽然URL没有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/authorizeCLIENT_ID = & REDIRECT_URI = HTTP%3A%2F%2Flocalhost%3A4000%2Fauth%2Fgithub%2Fcallback & RESPONSE_TYPE =代码&范围=用户%2Cpublic_repo`

如果我不config.exs使用环境变量和取而代之的是使用字符串值,请求的工作方式应该如此。

如何在Phoenix中使用环境变量?

回答

3

如果使用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环境变量设置的释放。

Distillery Docs

+0

今晚我将检查出的酒厂文档和看我怎么能实现这个我的项目。如果一切顺利,我会将其标记为正确的答案。谢谢迈克! –

2

你不应该包裹client_id字符串用双引号。把它写成是:

export GITHUB_CLIENT_ID=891538_my_key_bf0055

之前启动您的服务器或IEx标志,不要忘了source .env

1

如果你想让你的ENV变量只在你的应用程序的过程中保持可见,你可以把它们放在。env中文件,并与

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

当然,执行你的应用程序,在生产中,你可能会想尝试一些更复杂的机制,但上述工作正常进行简单的/ dev使用情况下,它会让你知道,如果你的应用程序正确读取ENV变量。

+0

这就是我的研究一直引领着我。我发现在生产中,最好将这些变量存储在'prod.secret.exs'中。如果我要将密钥存储在此文件中,那我该如何访问它们?目前,为了发展,这就是我如何获得我的钥匙。 https://github.com/Fallenstedt/elixir-discuss/blob/master/config/config.exs#L35-L37 –

0

促进发展 - 由iex -S mix phx.server运行的时候 - 你可以设置变量.iex.exs

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