डेविस सीक्रेट की सेट नहीं किया गया था


99

मैं प्रशासन बैक एंड के लिए सक्रिय व्यवस्थापक मणि का उपयोग करके एक रेल 4 ऐप विकसित कर रहा हूं। बदले में सक्रिय व्यवस्थापक उपयोगकर्ता प्रमाणीकरण के लिए Devise का उपयोग करता है। अब, जब मैं capistranoVPS सर्वर का उपयोग करके ऐप को तैनात करने का प्रयास करता हूं, तो मुझे निम्न त्रुटि मिलती है:

rake aborted!
Devise.secret_key was not set. Please add the following to your Devise initializer:
config.secret_key = '-- secret key --'

Google खोज इस त्रुटि के लिए बहुत कुछ नहीं करती है। किसी भी सुझाव क्यों यह एक त्रुटि फेंक रहा है? क्या मुझे deviseइनिशियलाइज़र में गुप्त कुंजी जोड़ना चाहिए , क्योंकि मुझे इस तरह की कॉन्फिग कुंजी सेट करने के लिए कोई जगह नहीं मिल रही है initializers/devise.rb?


@mrbrdo हाँ संदेश बताता है कि वास्तव में क्या गायब है, लेकिन जब आप devise.rb फ़ाइल खोलते हैं तो इसके बारे में कोई दस्तावेज़ नहीं होता है secret key। इसके अलावा, यदि आप एक ताजा स्थापित कर रहे हैं, तो अनुप्रयोग को इस बात का ध्यान रखना चाहिए। टिकट के लिए धन्यवाद github.com/plataformatec/devise/issues/2554 पर इसे हल कर दिया गया है।

जवाबों:


87

मैं bundle updateआज सुबह भाग गया और वही त्रुटि होने लगी।

मैंने इसे एक पंक्ति के रूप में जोड़ा config/initializers/devise.rbऔर त्रुटि ठीक हो गई।

ऐसा लगता है कि यह प्रतिबद्ध है जिसने इसे पेश किया।


24
भविष्य के गोगलर्स, 2014-07-08 के अनुसार, stackoverflow.com/questions/18080910/… पटरियों के फैलने से बचने के लिए 4+ के लिए अधिक उचित उत्तर है।
ज़ाचरी मोशनस्की

3
२०१५-१०-३० तक, stackoverflow.com/a/32525855/1842747 सबसे अच्छा उत्तर है, लेकिन मैं अत्यधिक अनुशंसा करता हूं कि इसे सीधे SECRET_KEY_BASEकॉपी करने के बजाय पर्यावरण चर सेट करने के लिए सीधे जाएं secrets.ymlताकि आप यह न भूलें कि आपकी "गुप्त कुंजी" पर्याप्त गुप्त नहीं है!
मोनोजोक

38

मेरे लिए 4.1 रेल और डेविस 3.2.4 पर क्या काम किया गया है config/initializers/devise.rb:

config.secret_key = ENV['DEVISE_SECRET_KEY'] if Rails.env.production?

या यदि आप figaroमणि का उपयोग करते हैं :config.secret_key = Figaro.env.devise_secret_key if Rails.env.production?
अलेक्जेंडर

33

रेलिंग के लिए 3.2.3 के रूप में, 4+ के लिए YourAppName की प्रमुख सेटिंग लोकेशन डिफॉल्ट करता है :: Application.config.secret_key_base जो कॉन्फिगरेशन / इनिशियलाइज़र / secret_token.rb में पाया जाता है।


2
आह जानकर अच्छा लगा मैं समझता हूं कि ओपन सोर्स ऐप के लिए वेरी बैड थिंग डेविस सीक्रेट की है जो स्रोत में सीधे सादे पाठ में कहीं बैठे हैं, सही है? कम से कम यह डिफ़ॉल्ट हमें कम स्थानों में गतिशील गुप्त कुंजी सेट करने की अनुमति देता है।
टोपेर हंट

4
क्या कोई गैर-पेशेवरों के लिए इस जानकारी के साथ क्या कर सकता है? धन्यवाद!
अहानिबेकाड

2
मुझे अपने ऐप में वह फ़ाइल दिखाई नहीं दे रही है। क्या इसका मतलब यह है कि जी उठता है: स्थापित सफलतापूर्वक काम नहीं किया? या यह उत्तर पहले से पुराना है?
अहानिबेकाड

10
रगड़ा हुआ। secret_token.rb रेल 4 के साथ स्टॉक में नहीं आता है, इसे कॉन्फिग / सीक्रेट्स से बदल दिया गया है ।yml ( अधिक जानकारी के लिए यहां देखें )। विषय से थोड़ा हटकर, लेकिन अपने / .ignignore में config / secret.yml को शामिल करना सुनिश्चित करें, जैसे कि यह रेल जनित टिप्पणियों में कहा गया है। कैसे, जानने के लिए यहां जाएं
brntsllvn

12

इससे मेरी समस्या हल हो गई:

अपने config / initializers / devise.rb फ़ाइल के नीचे कोड जोड़ें ।

config.secret_key = '-- secret key --' 

अपनी कुंजी के साथ 'गुप्त कुंजी--' को बदलें। मैं इसे सुरक्षा उद्देश्य के लिए एक ENV चर में संग्रहीत करने की सलाह देता हूं।


2
आप कैसे करते हैं और आप उन्हें कैसे जोड़ते हैं?
अहानजकदक

3
^ इसका उत्तर है कि फिगेरो रत्न का उपयोग करना। github.com/laserlemon/figaro आपने अपनी सभी वास्तविक कुंजियों को एक config / application.ymlfile में रखा है, इसे gitignore करें ताकि वे गुप्त रहें, और उन्हें अपने आवेदन में कहीं और संदर्भित करें ENV["your_particular_secret_key_name"]। फिर, आपका ऐप गतिशील रूप से आपकी कुंजियों का संदर्भ देता है। लेकिन आपने अपनी चाबियों का चयन कर लिया है, तो आप उन्हें अपने उत्पादन परिवेश में कैसे ला सकते हैं? आप उन्हें सीधे अपने स्थानीय विकास के वातावरण से लेकर हेरोकू तक हेरोकू का उपयोग करने के लिए धक्का देते हैं, और आपकी गुप्त कुंजी हेरोकू पर पर्यावरण चर के रूप में समाप्त हो जाएगी
एहनबेकड

12

चैंज के अनुसार :

Devise Rails 4+ अनुप्रयोगों पर secret_key_base का उपयोग अपने secret_key के रूप में करेगा। आप इसे बदल सकते हैं और devise.rb initializer को बदलकर अपने स्वयं के रहस्य का उपयोग कर सकते हैं।

मैं गया config/secrets.ymlऔर productionमूल्य बदल गया ।

इससे पहले:

production: 
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

उपरांत:

production: 
  secret_key_base: string of charaters

बेशक, इसे पर्यावरण चर पर सेट किया जाना चाहिए, जिसे मैं बाद में सेट कर दूंगा, लेकिन यह कम से कम इसे चल रहा है। मैंने उपयोग करके अपनी स्ट्रिंग प्राप्त की bundle exec rake secret


11
यह एक विरोधी पैटर्न है। कृपया अपनी उत्पादन गुप्त कुंजी में जाँच न करें।
ज़ैक ब्राउन

10

क्या ऐसा हो सकता है, कि आप भागे नहीं rails g devise:install?

rails generate devise Userपिछली कमांड के बिना चलने से यह समस्या होती है।


1
यह मेरी समस्या है लेकिन आप इसे कैसे ठीक कर सकते हैं ...?
C404

उपयोगकर्ताओं को बनाने के बाद "रेल जी वाइज: इंस्टॉल" को फिर से चलाना संभव होना चाहिए। यदि आप गिट का उपयोग करते हैं, तो परीक्षण शाखा बनाएं और इसे आज़माएं। यदि नहीं, तो अपने प्रोजेक्ट की एक प्रति पर प्रयास करें।
sascha.daniels

यही मेरी समस्या थी। मैंने एप्लिकेशन हटा दिया (मैंने बहुत कुछ नहीं किया था) और rails g devise userइससे पहले कि मैंने उपयोगकर्ता तालिका बनाने और माइग्रेट करने का प्रयास किया। इससे समस्या ठीक हो गई।
मैट

यह मेरे लिए 5.0.0.beta4 और डेविस 4.1.1 रेल के साथ एक ही समस्या को हल करता है, लेकिन मुझे यकीन नहीं है कि क्यों। मैं एक अंतर और केवल लाइन है कि अलग अलग गुप्त कुंजी से, मेरे devise.rb में बदल गई, + 102 था: "11 config.stretches = Rails.env.test 1??"
Cleverlemming

10

में config/initializers/devise.rbमैं डाल:

config.secret_key = ENV["SECRET_KEY_BASE"] if Rails.env.production?

क्योंकि अगर आप डालते हैं:

$ heroku config

आप secret_key_baseमोड के लिए देखेंगे production


2
मुझे लगता है कि इस जवाब के साथ एक बड़ी सुरक्षा समस्या है। यदि आप एकल उद्धरण '<% = ENV ["SECRET_KEY_BASE"]%>' के आस-पास रखते हैं, जैसा कि उत्तर बताता है, तो मुझे लगता है कि आपको प्रक्षेपित गुप्त कुंजी आधार प्राप्त करने के बजाय वर्णों के सटीक स्ट्रिंग मिलते हैं। दूसरे शब्दों में, यह शाब्दिक रूप से ENV ["SECRET_KEY_BASE"], सही है?
14:15 बजे user1515295

स्पष्ट करने के लिए, दोहरे उद्धरण चिह्नों का उपयोग करें: "<% = ENV [" SECRET_KEY_BASE "]%>"
user1515295

3
devise.rb एक रूबी फाइल है, एरब फाइल नहीं। <% = वाक्यविन्यास की कोई आवश्यकता नहीं है। बस config.secret_key = ENV का उपयोग करें ["SECRET_KEY_BASE"]
जॉन हेननेगन

6

मैं इस बदसूरत दृष्टिकोण के साथ अपनी शुरुआती समस्या को हल करता हूं:

config.secret_key = 'some1234keyq23' if Rails.env == 'production'

in config / initializers / devise.rb यह अब उत्पादन के साथ-साथ विकास में भी काम करता है!


6

मैंने गिट से एक नई मशीन पर अपनी रिपॉजिटरी क्लोन की।

config/secrets.yml 

फ़ाइल मेरी .gitignore सूची में थी, ताकि फ़ाइल मौजूद न हो, और डेविस फ़ाइल नहीं बनाता है।

मैंने फ़ाइल को जोड़ा, फिर से भाग गया

rails generate devise MODEL

और यह काम किया।


1
यह। Github ने सोचा कि यह secrets.ymlमेरी .gitignoreफ़ाइल में जोड़कर मददगार साबित हो रहा है । मैंने इसे पूरी तरह से पढ़ने के माध्यम से नहीं दिया, और अस्पष्ट रूप से प्रभावित था कि इसमें उत्पन्न रेल .gitignoreफ़ाइल की तुलना में बहुत अधिक शामिल था । : facepalm:
स्टीव

हां, यह मेरा मुद्दा था। मैं एक पुरानी git कमिट पर वापस लौट आया और सीक्रेट्स.माइल फ़ाइल चली गई।
18'17

बस यही समस्या थी। एक ऐप जिसका उपयोग मैं कुछ करने के लिए एक ट्यूटोरियल का पालन करने के लिए कर रहा हूं वह काम नहीं करना चाहता था, इसलिए मैंने एक नई निर्देशिका में क्लोन किया और ट्यूटोरियल लेखक के कमेंट्स की नकल की। समस्या नहीं देखी, इसलिए मैंने स्वयं config.secret_key सेट किया है। मेरे रेल सर्वर को बूट करने के दौरान ही पता चला। आप एक उत्थान दिया तो यह अधिक हो सकता है!
जो

5

जांचें कि क्या आपके config\initializers\secret_token.rbपास है:

YourAppName::Application.config.secret_token

यह होना चाहिए:

YourAppName::Application.config.secret_key_base

4

मेरे पास एक ही मुद्दा है। समस्या इन लाइनों के कारण हुई routes.rb:

devise_for :users, :skip => [:registrations]                                                   
as :user do
  get 'users/edit' => 'devise/registrations#edit', :as => 'edit_user_registration'              
  put 'users' => 'devise/registrations#update', :as => 'user_registration'                      
  get '/users/sign_out' => 'devise/sessions#destroy'                                            
end

मैंने उनकी टिप्पणी की और उसके बाद मैं चलता हूं:

$ rails generate devise:install

और इसने पूरी तरह से मूल्यांकन किया है। और उसके बाद मैंने रूट को अनफॉलो कर दिया।


बहुत बहुत धन्यवाद। एक नई परियोजना स्थापित करने में यह समस्या थी, और rails generate devise:installमेरा पहला डेविस मॉडल बनाने से पहले भूल गया । इस उत्तर के अनुसार, रूट में devise_for लाइन के बारे में टिप्पणी की और फिर जेनरेट कमांड चलाएं, और यह काम करता है।
user208769

मैंने devise_forअपनी रेक डीबी प्राप्त करने के लिए लाइन से टिप्पणी की : काम करने के लिए पलायन .. कोई विचार क्यों, हालांकि
क्लैम

1

खैर, मैं इस पोस्ट का अनुसरण कर रहा हूं और यहां लगभग सब कुछ करने की कोशिश कर रहा हूं। मैंने कुंजी जोड़ दी है devise.rb। लेकिन मुझे अभी भी वही त्रुटि मिल रही थी।

शायद एक मूर्खतापूर्ण जवाब, लेकिन मुझे बस इतना करना था devise.rbकि रिपॉजिटरी की कुंजी को आगे बढ़ाया जाए ।


1

ठीक कर:

  1. उत्पादन सर्वर में:

    sudo -H nano /etc/environment
  2. फिर फ़ाइल जोड़ें:

    export SECRET_KEY_BASE="yourkey"
    export DEMO03_DATABASE_PASSWORD="yourpass"

    इसे स्थायी रूप से सेट करने के लिए, और सिस्टम वाइड (सभी उपयोगकर्ता, सभी प्रक्रियाएँ) सेट चर जोड़ें

  3. स्थानीय परियोजना devise.rbफ़ाइल में:

    config.secret_key = ENV["SECRET_KEY_BASE"] if Rails.env.production?

तकनीकी जानकारी:

  • उबंटू 16.04
  • डेविस (4.2.0)
  • रेल 5.0.1
  • कैपिस्ट्रानो (3.7.1)

1

रेल 5.2.0 और डेविस 4.4.1 के साथ एक ही मुसीबत में भाग गया

निम्नलिखित को /config/initializers/devise.rb पर छोड़ें

config.secret_key = Rails.application.credentials.secret_key_base

1
यह उत्पादन में कम सुरक्षित है और सुरक्षा भंग की स्थिति में इसे बदलना कठिन बनाता है।
लैकोस्टेनकोडर

0

ऊपर के लोगों को कुछ हद तक पूरा जवाब देने की कोशिश करना: जैसा कि devise_auth_token रत्न के दस्तावेज में बताया गया है

... इसके अतिरिक्त, आप पारंपरिक devise.rb फ़ाइल को मैन्युअल रूप से बनाकर डेविस के अन्य पहलुओं को कॉन्फ़िगर कर सकते हैं config/initializers/devise.rb। इस फ़ाइल में आप क्या कर सकते हैं, इसके कुछ उदाहरण इस प्रकार हैं:

Devise.setup do |config|   
# The e-mail address that mail will appear to be sent from   
# If absent, mail is sent from "please-change-me-at-config-initializers-devise@example.com"  
config.mailer_sender = "support@myapp.com"

# If using rails-api, you may want to tell devise to not use ActionDispatch::Flash   
# middleware b/c rails-api does not include it.   
# See: http://stackoverflow.com/q/19600905/806956  
config.navigational_formats = [:json] end

मुझे भी यही समस्या थी, और जैसे यहाँ पर मुलाकात हुई, मैंने डेविस इनिशियलाइज़र बनाया, और इसमें config.secret_key = ENV['DEVISE_SECRET_KEY']लाइन जोड़ दी ।


-1

मैं सही समाधान नहीं जानता, लेकिन यह काम कर रहा है। आप इसे आज़मा सकते हैं। मुझे मेरे GitLab खाते से अपनी परियोजना का क्लोन बनाया गया था और जब मैं अपने स्थानीय सर्वर में चलता हूं, तो मुझे एक त्रुटि संदेश है:

rake aborted! Devise.secret_key was not set. Please add the following to your Devise initializer: config.secret_key = '-- secret key --'

config/initializers/devise.rbइस लाइन को खोलें और जोड़ें

config.secret_key = '<%= ENV["SECRET_KEY_BASE"] %>'

इस कोड लाइन से मेरी समस्या हल हो गई है।


config रूबी रॉकेट <%= %>को स्ट्रिंग इंटरपोलेशन के रूप में विकसित नहीं करेगा । आपकी कुंजी तब वस्तुतः वही होगी जो आपने स्ट्रिंग शाब्दिक के अंदर टाइप की है' what ever the %he!@#$ you type here is your key no matter what characters'
लैकोस्टेनोकोडर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.