【问题标题】:Rails 4.2.1 Devise 3.5.2 undefined method `token_authentication_key=' for Devise:ModuleRails 4.2.1 设计 3.5.2 未定义方法 `token_authentication_key=' 用于设计:模块
【发布时间】:2015-09-24 18:53:48
【问题描述】:

使用 rails 4.2.1、Ruby 2.1.1、Devise 3.5.2 创建 Rails 后端以对未来的 Android 应用进行身份验证,该应用允许用户注册登录/注销 JSON 请求,该请求生成一个令牌会消耗。

当我输入rake db:create db:migrate

我收到以下错误:

NoMethodError: undefined method `token_authentication_key=' for Devise:Module

我更新的唯一文件如下:

文件:db/migrate/_devise_create_users.rb

## Token authenticatable
t.string :authentication_token
add_index :users, :authentication_token, :unique => true

文件:app/models/user.rb

class User < ActiveRecord::Base
        devise :database_authenticatable, :registerable,
               :recoverable, :rememberable, :trackable, :validatable,
               :token_authenticatable

        before_save :ensure_authentication_token

    end

    def skip_confirmation!
       self.confirmed_at = Time.now
    end

文件:config/initializers/devise.rb

# ==> Configuration for :token_authenticatable
    # Defines name of the authentication token params key
    config.token_authentication_key = :auth_token

文件:db/migrate/_devise_create_users.rb

 t.string :name, :null => false, :default => ""

文件:db/migrate/_devise_create_users.rb

    ## Confirmable
    t.string   :confirmation_token
    t.datetime :confirmed_at
    t.datetime :confirmation_sent_at
    add_index :users, :confirmation_token,   :unique => true

关于 rake db:create db:migrate 命令的跟踪文件:

** Invoke db:create (first_time)
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:create
db/development.sqlite3 already exists
db/test.sqlite3 already exists
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
rake aborted!
NoMethodError: undefined method `token_authentication_key=' for Devise:Module
/home/pc/layer_1/config/initializers/devise.rb:14:in `block in <top (required)>'
/home/pc/.rvm/gems/ruby-2.2.1/gems/devise-3.5.2/lib/devise.rb:278:in `setup'
/home/pc/layer_1/config/initializers/devise.rb:3:in `<top (required)>'
/home/pc/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:268:in `load'
/home/pc/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:268:in `block in load'
/home/pc/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:240:in `load_dependency'
/home/pc/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:268:in `load'
/home/pc/.rvm/gems/ruby-2.2.1/gems/railties-4.2.1/lib/rails/engine.rb:652:in `block in load_config_initializer'
/home/pc/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.1/lib/active_support/notifications.rb:166:in `instrument'
/home/pc/.rvm/gems/ruby-2.2.1/gems/railties-4.2.1/lib/rails/engine.rb:651:in `load_config_initializer'
/home/pc/.rvm/gems/ruby-2.2.1/gems/railties-4.2.1/lib/rails/engine.rb:616:in `block (2 levels) in <class:Engine>'
/home/pc/.rvm/gems/ruby-2.2.1/gems/railties-4.2.1/lib/rails/engine.rb:615:in `each'
/home/pc/.rvm/gems/ruby-2.2.1/gems/railties-4.2.1/lib/rails/engine.rb:615:in `block in <class:Engine>'
/home/pc/.rvm/gems/ruby-2.2.1/gems/railties-4.2.1/lib/rails/initializable.rb:30:in `instance_exec'
/home/pc/.rvm/gems/ruby-2.2.1/gems/railties-4.2.1/lib/rails/initializable.rb:30:in `run'
/home/pc/.rvm/gems/ruby-2.2.1/gems/railties-4.2.1/lib/rails/initializable.rb:55:in `block in run_initializers'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/tsort.rb:226:in `block in tsort_each'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/tsort.rb:348:in `block (2 levels) in each_strongly_connected_component'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/tsort.rb:420:in `block (2 levels) in each_strongly_connected_component_from'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/tsort.rb:429:in `each_strongly_connected_component_from'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/tsort.rb:419:in `block in each_strongly_connected_component_from'
/home/pc/.rvm/gems/ruby-2.2.1/gems/railties-4.2.1/lib/rails/initializable.rb:44:in `each'
/home/pc/.rvm/gems/ruby-2.2.1/gems/railties-4.2.1/lib/rails/initializable.rb:44:in `tsort_each_child'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/tsort.rb:413:in `call'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/tsort.rb:413:in `each_strongly_connected_component_from'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/tsort.rb:347:in `block in each_strongly_connected_component'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/tsort.rb:345:in `each'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/tsort.rb:345:in `call'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/tsort.rb:345:in `each_strongly_connected_component'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/tsort.rb:224:in `tsort_each'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/tsort.rb:203:in `tsort_each'
/home/pc/.rvm/gems/ruby-2.2.1/gems/railties-4.2.1/lib/rails/initializable.rb:54:in `run_initializers'
/home/pc/.rvm/gems/ruby-2.2.1/gems/railties-4.2.1/lib/rails/application.rb:352:in `initialize!'
/home/pc/layer_1/config/environment.rb:5:in `<top (required)>'
/home/pc/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:274:in `require'
/home/pc/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:274:in `block in require'
/home/pc/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:240:in `load_dependency'
/home/pc/.rvm/gems/ruby-2.2.1/gems/activesupport-4.2.1/lib/active_support/dependencies.rb:274:in `require'
/home/pc/.rvm/gems/ruby-2.2.1/gems/railties-4.2.1/lib/rails/application.rb:328:in `require_environment!'
/home/pc/.rvm/gems/ruby-2.2.1/gems/railties-4.2.1/lib/rails/application.rb:457:in `block in run_tasks_blocks'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/task.rb:240:in `call'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/task.rb:240:in `block in execute'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/task.rb:235:in `each'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/task.rb:235:in `execute'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/task.rb:179:in `block in invoke_with_call_chain'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/task.rb:172:in `invoke_with_call_chain'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/task.rb:201:in `block in invoke_prerequisites'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/task.rb:199:in `each'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/task.rb:199:in `invoke_prerequisites'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/task.rb:178:in `block in invoke_with_call_chain'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/task.rb:172:in `invoke_with_call_chain'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/task.rb:165:in `invoke'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/application.rb:150:in `invoke_task'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/application.rb:106:in `block (2 levels) in top_level'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/application.rb:106:in `each'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/application.rb:106:in `block in top_level'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/application.rb:115:in `run_with_threads'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/application.rb:100:in `top_level'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/application.rb:78:in `block in run'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/application.rb:176:in `standard_exception_handling'
/home/pc/.rvm/rubies/ruby-2.2.1/lib/ruby/2.2.0/rake/application.rb:75:in `run'
/home/pc/.rvm/rubies/ruby-2.2.1/bin/rake:33:in `<main>'
Tasks: TOP => db:migrate => environment

抱歉,长时间跟踪命令调用,非常感谢任何帮助。

【问题讨论】:

    标签: android ruby-on-rails ruby devise


    【解决方案1】:

    从 3.2 版或其他版本开始,出于安全考虑,Devise 不再具有 token_authentication 系统。见:https://github.com/plataformatec/devise/issues/2739

    您似乎有一个旧版本设计的初始化程序。

    您可以使用其他方式为您的 android 应用程序进行身份验证,或者您使用额外的 gem 将 token_authentication 系统放回原处。以https://github.com/baschtl/devise-token_authenticatable 为例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-09
      • 1970-01-01
      相关资源
      最近更新 更多