【问题标题】:Devise Token Auth error: Devise.secret_key was not set设计令牌身份验证错误:未设置 Devise.secret_key
【发布时间】:2015-05-07 00:37:04
【问题描述】:

我目前正在使用 Devise Token Auth (https://github.com/lynndylanhurley/devise_token_auth) gem 并让它在开发中运行良好。但是,在我的生产环境中,当我运行rake db:migrate 时,我收到以下错误:

rake aborted!
Devise.secret_key was not set. Please add the following to your Devise initializer:

  config.secret_key = 'my secret key'

Please ensure you restarted your application after installing Devise or setting the key.
/Users/karimbutt/.rvm/gems/ruby-2.1.2/gems/devise-3.4.1/lib/devise/rails/routes.rb:480:in `raise_no_secret_key'
/Users/karimbutt/.rvm/gems/ruby-2.1.2/gems/devise-3.4.1/lib/devise/rails/routes.rb:209:in `devise_for'
/Users/karimbutt/.rvm/gems/ruby-2.1.2/gems/devise_token_auth-0.1.31/lib/devise_token_auth/rails/routes.rb:25:in `mount_devise_token_auth_for'
/Users/karimbutt/Development/projects/haubby/backend/config/routes.rb:3:in `block in <top (required)>'
/Users/karimbutt/.rvm/gems/ruby-2.1.2/gems/actionpack-4.2.0/lib/action_dispatch/routing/route_set.rb:423:in `instance_exec'
/Users/karimbutt/.rvm/gems/ruby-2.1.2/gems/actionpack-4.2.0/lib/action_dispatch/routing/route_set.rb:423:in `eval_block'
/Users/karimbutt/.rvm/gems/ruby-2.1.2/gems/actionpack-4.2.0/lib/action_dispatch/routing/route_set.rb:401:in `draw'
/Users/karimbutt/Development/projects/haubby/backend/config/routes.rb:1:in `<top (required)>'

当我添加密钥时,如错误消息所示,我收到以下错误:

rake aborted!
NoMethodError: undefined method `secret_key=' for DeviseTokenAuth:Module
/Users/karimbutt/Development/projects/haubby/backend/config/initializers/devise_token_auth.rb:12:in `block in <top (required)>'
/Users/karimbutt/.rvm/gems/ruby-2.1.2/gems/devise_token_auth-0.1.31/lib/devise_token_auth/engine.rb:23:in `setup'
/Users/karimbutt/Development/projects/haubby/backend/config/initializers/devise_token_auth.rb:1:in `<top (required)>'

我尝试了以下方法 - 重新安装宝石 - 在 Devise 配置文件中设置检查以查看 Rails.env=="production" - 更新的宝石 - 使用生成器重新安装设计 - 删除表并使用生成器创建的新迁移重新迁移

这是我的初始化程序/devise_auth.rb 文件,当我按要求输入密钥时:

DeviseTokenAuth.setup do |config|
  # By default the authorization headers will change after each request. The
  # client is responsible for keeping track of the changing tokens. Change
  # this to false to prevent the Authorization header from changing after
  # each request.
  #config.change_headers_on_each_request = true

  # By default, users will need to re-authenticate after 2 weeks. This setting
  # determines how long tokens will remain valid after they are issued.
  #config.token_lifespan = 2.weeks

  config.secret_key = 'my secret key'

  # Sometimes it's necessary to make several requests to the API at the same
  # time. In this case, each request in the batch will need to share the same
  # auth token. This setting determines how far apart the requests can be while
  # still using the same auth token.
  #config.batch_request_buffer_throttle = 5.seconds

  # This route will be the prefix for all oauth2 redirect callbacks. For
  # example, using the default '/omniauth', the github oauth2 provider will
  # redirect successful authentications to '/omniauth/github/callback'
  # config.omniauth_prefix = "/omniauth"
end

任何想法如何解决这个问题?为什么这只发生在生产环境中?

【问题讨论】:

  • 你把 config.secret_key = 'my secret key' 放在哪里了?
  • 您可以将您的config/initializers/devise_token_auth.rb 添加到问题中吗?
  • 谢谢!我已经在配置文件中添加了 config.secret_key

标签: ruby-on-rails ruby devise token config


【解决方案1】:

根据文档,您需要将config.secret_key = 'my secret key' 添加到

config/initializers/devise_token_auth.rb

FWIW,您可能不想将秘密保存在您的代码中。使用

config.secret_key = ENV[ 'DEVISE_TOKEN_AUTH_SECRET_KEY' ]

编辑:我认为问题在于您需要设置 Devise.secret_key,而不是 Devise Token Auth 密钥。有设计初始化器吗?

【讨论】:

  • 谢谢!我确实将它放在初始化程序中 - 编辑了上面的问题以包含该文件。是的,一旦我启动并运行它,我打算只使用 ENV 变量而不是硬编码它。
  • 知道了!看起来我还必须创建 devise.rb 文件来配置它
【解决方案2】:

您将其添加到 DeviseTokenAuth 初始化程序。相反,创建一个Devise 初始化器config/initializers/devise.rb:

Devise.setup do |config|
  config.secret_key = '...'
end

注意 1:您可以运行 rake secret 以获取随机密钥。

注意 2:有品位的人可能更喜欢将他们的秘密保存在环境变量中,以避免将它们检入 git:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-03
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 2016-05-08
    • 2015-02-11
    • 1970-01-01
    相关资源
    最近更新 更多