2016-03-31 7 views
4

フェニックスアプリケーションでconn.secret_key_baseを設定する方法:私はフェニックスのアプリケーションで次のエラーを取得しています

cookie store expects conn.secret_key_base to be set

それは私のPostControllerで、この認証機能の |> redirect(to: session_path(conn, :new))ラインから来るように見える

モジュール:

defp authenticate(conn, _opts) do 
    if conn.assigns.current_user do 
     conn 
    else 
     conn 
     |> put_flash(:error, "You must be signed in to post a project.") 
     |> redirect(to: session_path(conn, :new)) 
     |> halt() 
    end 
    end 

明らかに、このエラーは、conn.secret_key_baseを設定する必要があることを意味します。

ここで、どのようにこの値を設定しますか?

答えて

11

あなたは鳳凰アプリケーションを作成する場合、これがデフォルトで指定する必要があります。

https://github.com/phoenixframework/phoenix/blob/2861f0db3df3d81ee6ce79f928ef4e0b439c4dcd/installer/templates/new/config/config.exs#L16 

この設定は、あなたのために欠落している場合、config/config.exsに次のように置く:

config :my_app, MyApp.Endpoint, 
    secret_key_base: "some_secret", 

あなたはmix phoenix.gen.secretを使用することができます「some_secret」の代わりに使用する必要がある値を生成するタスク。

+0

注意:生産時には、このキーを秘密にする必要があります。したがって、prod.secret.exsでオーバーライドしてください。 – Johannes

+0

"mix phoenix.gen.secretは非推奨です。代わりにphx.gen.secretを使用してください。 - 私のような他のGoogle社員にとって。 –

3

これはconfig/prod.secret.exsで設定します。これは機密扱いになっているので、バージョンコントロールには入れないようにしてください。

# config/prod.secret.exs 

use Mix.Config 

config :trope_api, MyApp.Endpoint, 
    secret_key_base: "SOMEVERYLONGSTRING" 

このファイルは、下

# config/prod.exs 

# Finally import the config/prod.secret.exs 
# which should be versioned separately. 
import_config "prod.secret.exs" 

で設定/ prod.exsに含まれているだけで、あなたのバージョン管理システムからそれを維持するよりも、他のアプローチは、それを設定するには、環境変数を使用することですあなたのアプリを起動するとき。

あなたは、このようなあなたのアプリでそれらにアクセスすることができます。あなたにも開発中にこれを使用する場合は、エクスポートすることができ

$ PORT=4001 MIX_ENV=prod TESTCONFIG=testvalue mix phoenix.server 

# config/prod.exs 

# Just a test vaule for env variables 
config :my_app, MyApp, 
    test_value: System.get_env("TESTCONFIG") 

をそして

サーバーを起動するときにそれらを設定しますあなたのシェルの変数。または、プロジェクトルートに .env(または好きなもの)という名前のファイルを作成し、.gitignoreに追加してください。そこにはそうと同じように、ご使用の環境変数を追加します。

export TESTCONFIG="Test Config Value" 
export OTHERTESTCONFIG="Other Test Config Value" 

新しい端末セッションを開始するとき、ちょうどすぐにあなたのプロジェクトのフォルダ内source .envを実行します。これはデータベース資格情報にも役立ちます。このようにして、バージョンコントロールから離れ、さらに重要なのはハードコーディングされません。したがって、チームで作業する場合は、ローカル開発環境(dbなど)に合わせて適切な値を持つ.envファイルを作成することができます。

アプリを本番環境に導入するときには、.envファイルをサーバーまたはあなたのコンテナは、より簡単で安全なスタートを可能にします。

+0

あなたの(今削除された)質問について:これは私が私の答えで説明するものとほとんど同じです。'config/dev.exs'の変数にアクセスするには' System.get_env( "VARIABLE_NAME") 'を使います。多くの変数がある場合やプロセスを簡素化したい場合は、 '.env'ファイルを使ってアプローチを使用してください。 –

関連する問題