ডিভাইস সিক্রেট কী সেট করা হয়নি


100

প্রশাসনের পিছনের দিকে সক্রিয় প্রশাসক রত্ন ব্যবহার করে আমি একটি রেলস 4 অ্যাপ বিকাশ করছি developing সক্রিয় প্রশাসনের পরিবর্তে ব্যবহারকারী প্রমাণীকরণের জন্য ডিভাইস ব্যবহার করে। এখন, আমি যখন capistranoভিপিএস সার্ভার ব্যবহার করে অ্যাপটি স্থাপন করার চেষ্টা করি তখন আমি নীচের ত্রুটিটি পাই:

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

একটি গুগল অনুসন্ধান এই ত্রুটির জন্য খুব বেশি কিছু করে না। কোনও পরামর্শ কেন এটি ত্রুটি ছুড়ে দিচ্ছে? deviseইনিশিয়ালাইজারে গোপন কীটি যুক্ত করা উচিত , যেহেতু আমি এ জাতীয় কনফিগার কী সেট করার কোনও জায়গা পাই না initializers/devise.rb?


@ এমআরবার্ডো হ্যাঁ বার্তাটি সঠিকভাবে কী অনুপস্থিত তা জানায় তবে আপনি যখন ডিভাইস.আরবি ফাইল খুলবেন তখন কোনও নথি নেই secret key। এছাড়াও আপনি যদি একটি নতুন ইনস্টল চালাচ্ছেন তবে অ্যাপ্লিকেশনটির এটির যত্ন নেওয়া উচিত। টিকিট ধন্যবাদ github.com/plataformatec/devise/issues/2554 এ সমাধান হয়েছে।

উত্তর:


87

আমি bundle updateআজ সকালে দৌড়ে গিয়ে একই ত্রুটি পেতে শুরু করি।

আমি এটিকে একটি লাইন হিসাবে যুক্ত করেছি config/initializers/devise.rbএবং ত্রুটিটি ঠিক করা হয়েছিল।

এই মনে করা হয় কমিট যার ফলে এটি চালু।


24
ভবিষ্যতের গুগলারস, ২০১৪-০7-২০১৮ পর্যন্ত, স্ট্রোকভারফ্লো / প্রশ্নগুলি / ১80০৮০৯১০/২ কনফিগারেশনে গোপনীয়তা ছড়ানোর জন্য রেলস 4+ এর আরও সঠিক উত্তর।
জাচারি মোশানস্কি

4
2015-10-30 পর্যন্ত, স্ট্যাকওভারফ্লো .com/ a /32525855/ 1842747 সেরা উত্তর, তবে আমি অত্যন্ত পরামর্শ দিচ্ছি যে SECRET_KEY_BASEপরিবেশের পরিবর্তনশীলটিকে অনুলিপি করার পরিবর্তে এটি সরাসরি স্থাপন করা উচিত secrets.ymlযাতে আপনি ভুলে যাবেন না যে আপনার "গোপন কী" যথেষ্ট গোপন নয়!
monozok

38

R.১.৪ এবং 3..২.৪ ডিভাইসগুলিতে আমার জন্য কী কাজ করেছে 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 পাওয়া যায় কনফিগ / initializers / secret_token.rb


4
আহ ভাল। আমি বুঝতে পেরেছি যে কোনও ওপেন সোর্স অ্যাপ্লিকেশনটির জন্য ডিভাইস গোপন কীটি উত্সের সরল পাঠ্যে কোথাও বসে আছে, এটি খুব খারাপ বিষয়? কমপক্ষে এই ডিফল্টটি আমাদের কম জায়গায় গতিশীল গোপন কী সেট আপ করতে দেয়।
টোফার হান্ট

4
কেউ এই তথ্যটি কী করতে চান তা অ বান্ধবীদের জন্য বানান করতে পারেন? ধন্যবাদ!
আহ্নবিজক্যাড

4
আমি আমার অ্যাপ্লিকেশনটিতে একটি ফাইল দেখতে পাচ্ছি না। এর অর্থ কি রেল জি নকশায়: ইনস্টলটি সফলভাবে কাজ করে নি? নাকি এই উত্তরটি ইতিমধ্যে পুরানো?
আহ্নবিজক্যাড

10
সেকেলে. গোপন_ টোকন.আরবি কনফিগারেশন / সিক্রেটস.আইএমএল ( আরও তথ্যের জন্য এখানে দেখুন) প্রতিস্থাপন করা হয়ে রেল 4 এর সাথে স্টক আসে না । সামান্যভাবে বিষয়বস্তু বন্ধ করুন, তবে আপনার .gitignore এ কনফিগারেশন / সিক্রেটস.আইএমএল অন্তর্ভুক্ত করবেন তা নিশ্চিত করুন, যেমন এটি রেল-উত্পন্ন মন্তব্যগুলিতে বলে। কীভাবে তা শিখতে এখানে যান ।
brntsllvn

12

এটি আমার সমস্যার সমাধান করেছে:

আপনার কনফিগারেশন / আরম্ভকারী / devise.rb ফাইলে নীচের কোডটি যুক্ত করুন।

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

'- গোপন কী -' আপনার নিজস্ব কী দিয়ে প্রতিস্থাপন করুন। সুরক্ষার প্রয়োজনে আমি এটি একটি ENV ভেরিয়েবলে সঞ্চয় করার প্রস্তাব দিই।


4
আপনি কীভাবে এটি করেন এবং আপনি কীভাবে তাদের সংযুক্ত হন?
আহনিবিজ্যাকড

4
to এর উত্তরটি হল ফিগারো রত্ন ব্যবহার করা। github.com/laserlemon/figaro আপনি আপনার সমস্ত আসল কীগুলি একটি কনফিগারেশন / অ্যাপ্লিকেশন.মিলফায়ালে রেখেছেন, এটি গিটিগনোর করুন যাতে তারা গোপন থাকে এবং আপনার অ্যাপ্লিকেশনটিতে অন্য কোথাও রেফারেন্স দেয় ENV["your_particular_secret_key_name"]। তারপরে, আপনার অ্যাপ্লিকেশনটি আপনার কীগুলি পরিবর্তনশীলভাবে উল্লেখ করে। তবে আপনি আপনার কীগুলিকে গিটিংগর্ড করেছেন, তবে কীভাবে আপনি এগুলি আপনার উত্পাদন পরিবেশে পাবেন? আপনি এগুলিকে আপনার স্থানীয় বিকাশের পরিবেশ থেকে সরাসরি ফিগারো ব্যবহার করে হিরকুতে ঠেকান এবং আপনার গোপন কীগুলি হিরকুতে পরিবেশ পরিবর্তনশীল হিসাবে শেষ হবে
আহ্নবিজক্যাড

12

অনুযায়ী পরিবর্তণের :

ডিভাইসগুলি রেল 4+ অ্যাপ্লিকেশনগুলিতে গোপন_কি হিসাবে গোপন_কি_বাস ব্যবহার করবে। আপনি এটি পরিবর্তন করতে পারেন এবং নিজের গোপনীয়তাটি ডিভাইস.আরবি ইনিশিয়ালাইজারটি পরিবর্তন করে ব্যবহার করতে পারেন।

আমি গিয়ে মূল্য config/secrets.ymlপরিবর্তন করেছিলাম production

আগে:

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

পরে:

production: 
  secret_key_base: string of charaters

অবশ্যই, এটি পরিবেশ পরিবর্তনশীলতে সেট করা উচিত, যা আমি পরে সেট করব, তবে এটি কমপক্ষে এটি চলমান পেয়েছে। আমি ব্যবহার করে আমার স্ট্রিং পেয়েছি bundle exec rake secret


12
এটি একটি অ্যান্টি-প্যাটার্ন। আপনার উত্পাদন গোপন কী পরীক্ষা করে দেখুন।
জ্যাক ব্রাউন

10

এটা কি হতে পারে যে আপনি চালানো হয়নি rails g devise:install?

rails generate devise Userপূর্ববর্তী কমান্ড ব্যতীত দৌড়ানো এই সমস্যা সৃষ্টি করে।


4
এটাই আমার সমস্যা তবে কীভাবে আপনি এটি ঠিক করবেন ...?
C404

ব্যবহারকারী তৈরি করার পরে "রেলস জি ডিভাইস: ইনস্টল" পুনরায় চালানো সম্ভব উচিত। আপনি যদি গিট ব্যবহার করেন, পরীক্ষার শাখা তৈরি করুন এবং এটি ব্যবহার করে দেখুন। যদি তা না হয় তবে আপনার প্রকল্পের অনুলিপিটিতে এটি ব্যবহার করে দেখুন।
sascha.daniels

আমার সমস্যাটি এটাই ছিল। আমি অ্যাপটি মুছে ফেলেছি (আমি খুব বেশি কিছু rails g devise userকরি নি) এবং ব্যবহারকারীর টেবিলটি তৈরি করতে এবং স্থানান্তরিত করার চেষ্টা করার আগেই করেছি। এটি সমস্যার সমাধান করেছে।
ম্যাট

এটি আমার জন্য একই সমস্যাটি রিয়েল ৫.০.০. বেটা ৪ এবং ডিভাইস ৪.১.১ নিয়ে সমাধান করেছে তবে কেন তা আমি নিশ্চিত নই। আমি একটি পৃথক এবং একমাত্র লাইনটি চালিয়েছিলাম যা আমার ডিভাইস.আরবিতে পরিবর্তিত হয়েছিল, একটি আলাদা গোপন কী বাদে, +১২: "কনফিগারস্ট্রেটস = রেইলস.এনভি.টেসট? ১: ১১"
ক্লিভারলেমিং

10

ইন config/initializers/devise.rbআমি করা:

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

কারণ যদি আপনি:

$ heroku config

আপনি secret_key_baseমোডের জন্য একটি দেখতে পাবেন production


4
আমি মনে করি এই উত্তরটি নিয়ে একটি বড় সুরক্ষা সমস্যা আছে। যদি আপনি উত্তরটির হিসাবে '<% = ENV ["SECRET_KEY_BASE"]%>' এর কাছাকাছি একক উদ্ধৃতি রাখেন, তবে আমি মনে করি যে আপনি বিভক্ত গোপন কী বেসটি পাওয়ার পরিবর্তে অক্ষরের সঠিক সঠিক স্ট্রিংটি পেয়েছেন। অন্য কথায়, এটি আক্ষরিকভাবে ENV ["SECRET_KEY_BASE"] বানান, তাই না?
ব্যবহারকারী 1515295

স্পষ্ট করতে ডাবল উক্তি ব্যবহার করুন: "<% = ENV [" SECRET_KEY_BASE "]%>"
ব্যবহারকারীর 1515295

4
devise.rb একটি রুবি ফাইল, একটি ফাইল ফাইল নয়। <% = সিনট্যাক্সের প্রয়োজন নেই। স্রেফ কনফিগারেশন_সেট_কি = ENV ["SECRET_KEY_BASE"]
জন হিনেগান

6

আমি এই কুৎসিত পদ্ধতির সাহায্যে আমার প্রাথমিক সমস্যাটি সমাধান করি:

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

কনফিগারেশন / ইনিশিয়েলাইজার্স / ডিভাইস.আরবি তে এটি এখন উত্পাদন পাশাপাশি উন্নয়নেও কাজ করে!


6

আমি আমার সংগ্রহশালাটি গিট থেকে একটি নতুন মেশিনে ক্লোন করেছি। দ্য

config/secrets.yml 

ফাইলটি আমার .gitignore তালিকায় ছিল, সুতরাং সেই ফাইলটি উপস্থিত ছিল না এবং ডিভাইস ফাইলটি তৈরি করে না।

আমি ফাইলটি যুক্ত করেছিলাম, তারপরে আবার দৌড়ে গেল

rails generate devise MODEL

এবং এটা কাজ করে.


4
এই. গিথুব ভেবেছিলেন এটি secrets.ymlআমার .gitignoreফাইলে যুক্ত করে সহায়ক হবে। আমি এটিকে পুরোপুরি পঠিত পাঠাতে পারিনি, এবং অস্পষ্টভাবে মুগ্ধ হয়েছি যে এতে উত্পন্ন রেল .gitignoreফাইলের চেয়ে অনেক বেশি কিছু রয়েছে । : ফেসপাম:
স্টিভ

হ্যাঁ, আমার সমস্যাটি এটাই ছিল। আমি পুরানো গিট কমিটে ফিরে এসেছি এবং সিক্রেটস.আইএমএল ফাইলটি চলে গেছে।
ddonche

এই একই সমস্যা ছিল। কোনও অ্যাপের জন্য আমি টিউটোরিয়ালটি অনুসরণ করতে ব্যবহার করছি যা কিছু কাজ করতে চায় না, তাই আমি একটি নতুন ডিরেক্টরিতে ক্লোন করে টিউটোরিয়াল লেখকের কমিটগুলি অনুলিপি করেছিলাম। সমস্যাটি দেখেনি, তাই আমি নিজেই 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 লাইনটি জেনেট কমান্ড চালানোর জন্য মন্তব্য করেছে এবং এটি কাজ করে।
ব্যবহারকারী 208769

আমি 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
  • ডিভাইস (৪.২.০)
  • রেল 5.0.1
  • ক্যাপিস্ট্রানো (৩. 3..১)

1

রেলগুলি 5.2.0 এবং ডিভাইস 4.4.1 এর সাথে একই সমস্যায় পড়ে

নিম্নলিখিতটি /config/initializer/devise.rb এ ফেলে দিন

config.secret_key = Rails.application.credentials.secret_key_base

4
এটি উত্পাদনে কম সুরক্ষিত এবং সুরক্ষা লঙ্ঘনের ঘটনাটি পরিবর্তন করা আরও শক্ত করে তোলে।
ল্যাকোস্টেইনাইকোডার

0

উপরেরগুলিকে কিছুটা আরও সম্পূর্ণ উত্তর দেওয়ার চেষ্টা করা হয়েছে: যেমনটি শ্বেত_আউথ_ টোকেন রত্নের ডকুমেন্টেশনে উল্লিখিত হয়েছে

... অতিরিক্তভাবে, আপনি নিজেই এখানে traditionalতিহ্যবাহী ডিভাইস.আরবি ফাইল তৈরি করে কৌতুকের অন্যান্য দিকগুলি কনফিগার করতে পারেন 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']লাইন যুক্ত করেছি add


-1

আমি সঠিক সমাধান জানি না তবে এটি কাজ করছে। আপনি চেষ্টা করতে পারেন. আমার প্রকল্পটি আমার গিটল্যাব অ্যাকাউন্ট থেকে ক্লোন করা হয়েছিল এবং আমি যখন আমার স্থানীয় সার্ভারে চালাই তখন আমার একটি ত্রুটি রয়েছে বার্তা:

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"] %>'

এই কোড লাইনটি আমার সমস্যার সমাধান করে।


কনফিগার রুবি রকেটগুলি <%= %>স্ট্রিং ইন্টারপোলেশন হিসাবে প্রকাশ করবে না । আপনার কীটি তখন আক্ষরিকভাবে আপনি যা স্ট্রিংয়ের ভিতরে ' what ever the %he!@#$ you type here is your key no matter what characters'
লিখেছেন তা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.