railsのsecret_key_baseの使用方法について 4
質問
Rails 4の初心者なのですが、Rails 4で使用されている
secret_key_base
の下に
config/secrets.yml
の下にあります。この概念について説明していただけますか?
また、本番環境で作業しているときに、プロンプトが表示され、その中に
secret_key
と
devise.rb
,
config.secret_key
そして
secret_key_base
. しかし、新しい秘密は
rake secret
コマンドを使用して新しい秘密を生成することができます。
開発環境と本番環境の違いは何ですか?
新しく生成された
secret_key
で追加したとき
secret_key_base
で追加した場合、どうなるのでしょうか?
他のサーバとのアプリケーションの安全性はどうなっているのでしょうか?
どのように解決するのですか?
この
secret_token.rb
ファイルのコンテンツには、長いランダムな文字列
これは署名されたクッキーの完全性を検証するために使用されます。
(例えば、人々がウェブアプリにサインインしたときのユーザーセッションなど)。
ドキュメンテーション は言う。
にある既存の secret_key_base を使用します。
secret_token.rb
イニシャライザー で設定したSECRET_KEY_BASE環境変数を、Railsアプリを本番モードで実行するすべてのユーザに対して設定します。 を設定します。別の方法として、既存のsecret_key_baseを単にsecret_token.rb
イニシャライザーにある既存のsecrets.ymlをproductionセクションにコピーし、代わりに<%= ENV["SECRET_KEY_BASE"] %>
.
重要なファイルであり、.gitignoreに入れることはできないので、env変数に
secret_key_base
の値を格納するのが良い方法とされています。
作成
.env
または
.powenv
というファイルにして保存します。
export SECRET_TOKEN="9489b3eee4eccf317ed77407553e8adc97baca7c74dc7ee33cd93e4c8b69477eea66eaedeb18af0be2679887c7c69c0a28c0fded0a71ea472a8c4laalal19cb"
そして
config/initializers/secret_token.rb
YourAppName::Application.config.secret_key_base = if Rails.env.development? or Rails.env.test? # generate simple key for test and development environments
('a' * 30) # should be at least 30 chars long
else
ENV['SECRET_TOKEN']
end
この記事 は(少し古くて)長いですが、このトピックに関する有用な情報が本当にたくさんあります。
更新 04.05.15
Rails 4.2からは
secret_token.rb
ファイルはなくなりました。
新しい規約では
config/secrets.yml
ファイルがあり、アプリケーションの秘密を保存することを目的としています。
読んでみてください をご覧ください。既存のアプリを 4.2.x にアップグレードする方法について、技術革新にしたがって説明します。
技術的には
secrect_key_base
は、アプリケーションの秘密の入力として
key_generator
メソッド(チェック
Rails.application.key_generator
).
アプリケーションの
key_generator
であり、したがって
secret_key_base
は、Railsフレームワーク内の3つのコア機能で使用されています。
-
暗号化されたクッキーのキーを導き出す。
cookies.encrypted
. -
HMACで署名されたクッキーのキーを導き出す。
でアクセスできます。
cookies.signed
. -
アプリケーションのすべての名前付きキーの導出
アプリケーションの名前付き
message_verifier
インスタンスになります。
3つのそれぞれについて、詳しくは の記事をご覧ください。 .
関連
-
[解決済み】gemのインストールができない - gemネイティブ拡張の構築に失敗 - そのようなファイルをロードできない -- mkmf (LoadError)
-
[解決済み】コントローラでJSONをレンダリングする
-
[解決済み] ウェブパッカーがアプリケーションを見つけ出せない
-
[解決済み] Ruby on rails "No route matches" (ルートに一致するものがない)。
-
[解決済み] どなたか、collection_selectをわかりやすく説明していただけませんか?
-
[解決済み] Ruby on Railsのマイグレーションでデータベースのカラムの名前を変更するにはどうすればよいですか?
-
[解決済み] Ruby on Railsで現在の絶対URLを取得するにはどうすればよいですか?
-
[解決済み] Rails 4で懸念事項を使用する方法
-
[解決済み】Railsの認証トークンを理解する
-
[解決済み】rubyで安全なjoinパス名を行うには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】PG::ConnectionBad: fe_sendauth: パスワードが供給されない
-
[解決済み] Mac OS Xにhomebrewがインストールされているかどうかを確認する方法
-
[解決済み] Errno::EACCESS: パーミッションが拒否された @ dir_s_mkdir
-
[解決済み] Ruby on Railsでsimple_formを使うさまざまな方法|何が違うの?
-
[解決済み] nil:NilClass の未定義メソッド `each' - しかし、なぜ?
-
[解決済み] バリデーションなしで属性を更新する方法
-
[解決済み] railsで':remote => true'はどのように動作するのでしょうか?
-
[解決済み] 属性を割り当てる場合、引数としてハッシュを渡す必要がある
-
[解決済み] RSpecとCucumberの違いは何ですか?[クローズド]
-
[解決済み] 未初期化の定数 "コントローラ名"