2016-03-31 14 views
4

Phoenix uygulamasında conn.secret_key_base nasıl ayarlanır:Benim Phoenix uygulamasında aşağıdaki hatayı alıyorum

cookie store expects conn.secret_key_base to be set

Benim PostController bu kimlik doğrulaması işlevinin |> redirect(to: session_path(conn, :new)) hattından geliyor gibi görünüyor

modülü:

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 

Açıkçası bu hata, conn.secret_key_base'in ayarlanması gerektiği anlamına gelir.

Bu değeri nerede ve nasıl ayarlayabilirim?

Eğer anka uygulaması oluşturduğunuzda, bu varsayılan olarak belirtilmelidir

cevap

11

:

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

Sen mix phoenix.gen.secret kullanabilirsiniz: Bu yapılandırma sizin için yoksa

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

, config/config.exs aşağıdaki koymak "some_secret" yerine kullanmanız gereken değeri üretme görevi.

+0

Lütfen dikkat: Üretimde bu anahtarın bir sır olarak saklanması gerekir. Yani bir prod.secret.exs içinde geçersiz kılın. – Johannes

+0

"mix phoenix.gen.secret kullanımdan kaldırıldı. Bunun yerine phx.gen.secret kullanın." - Benim gibi diğer yayıncılar için. –

3

Bunu, config/prod.secret.exs dosyasında ayarlayabilirsiniz. Bunun gizlilik olması gerektiğinden, sürüm kontrolünüze girmemesi gerektiğini unutmayın.

# config/prod.secret.exs 

use Mix.Config 

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

Bu dosya yapılandırma dahildir/alt

# config/prod.exs 

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

sadece sürüm kontrol sisteminin dışında tutmak için daha bir başka yaklaşım olarak prod.exs ayarlamak için ortam değişkenlerini kullanmak olacaktır uygulamanızı başlattığınızda.

Böyle uygulamanızda erişebilirsiniz: sunucu

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

başlatırken de gelişim sırasında bu kullanmak istiyorsanız

# config/prod.exs 

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

Sonra bunları, dışa olabilir Kabuğunuzdaki değişkenler. Veya proje kökünüzde .env (veya istediğiniz her şeyi) adlı bir dosya oluşturup onu .gitignore'a ekleyin. Yeni bir terminal oturumu başlatırken

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

, sadece hızlı bir şekilde proje klasörünün içindeki source .env çalıştırın: Orada bu kadar gibi, ortam değişkenleri ekleyin. Bu, veritabanı kimlik bilgileri için de kullanışlıdır. Bu sayede sürüm kontrolü dışında kalıyorlar ve daha da önemlisi kodlanmış değiller. Eğer bir takımda çalışırken Yani, herkes kendi yerel kalkınma kurulumu için doğru değerler (db vs.) kendi .env dosya olabilir

üretime bir uygulama dağıtırken, sunucunuzda veya .env dosyaları kullanabilirsiniz Daha kolay ama güvenli bir başlangıç ​​için kabınızı.

+0

(şimdi silindi) sorusuyla ilgili olarak: Bu, cevabımda açıkladığım şeydir.'Config/dev.exs' içindeki değişkene erişmek için 'System.get_env (" VARIABLE_NAME ")' yi kullanın. Çok sayıda değişkeniniz varsa veya işlemi basitleştirmek istiyorsanız, bir '.env' dosyasıyla yaklaşımı kullanın. –