Rails3 / Devise:未定义的方法new_application_user_session_path

时间:2010-11-03 21:11:57

标签: ruby-on-rails ruby-on-rails-3 ldap devise

遵循README文档,我将Devise安装到现有的Rails 3应用程序中。但是,它似乎不起作用。当我尝试访问我的before_filter :authenticate_application_user!控制器之一时,收到以下错误消息:

undefined method 'new_application_user_session_path' for #<Devise::FailureApp::0x60aldc0>

我不知道为什么。我检查了很多,看看我是否正确地按照安装指南,无济于事。所以我想知道是否有人帮助我。

这是我的routes.rb

AwesomeApp::Application.routes.draw do

  devise_for :application_users

  root :to => "home#index"  

  scope "admin" do
    resources :application_users, :path => "users"    
  end
end

这是我的Gemfile

source 'http://rubygems.org'

gem 'rails', '3.0.0'

gem 'ruby-oci8'
gem 'activerecord-oracle_enhanced-adapter'
gem 'warbler'

gem 'devise', '1.1.3'

group :development, :test do
  gem 'factory_girl_rails'
  gem 'forgery'
end

以下是我用于更新现有数据库架构的迁移文件:

class DeviseCreateApplicationUsers < ActiveRecord::Migration
  def self.up
    change_table(:application_users) do |t|
      t.rememberable
      t.trackable
    end

  end

  def self.down
    change_table(:application_users) do |t|
      t.remove :rememberable, :trackable
    end
  end
end

注意:如果有人想知道,我将使用LDAP进行身份验证。这就是为什么你没有看到t.database_authenticatable

的原因

以下是我的模型application_user.rb

class ApplicationUser < AbstractModel

  devise :rememberable, :trackable, :timeoutable  

end

这是我的devise.rb初始化文件:

Devise.setup do |config|
  config.mailer_sender = "please-change-me@config-initializers-devise.com"
  require 'devise/orm/active_record'
  config.authentication_keys = [ :user_ldap_id ]
  config.stretches = 10
  config.encryptor = :bcrypt
  config.pepper = "SALT AND PEPPERS HERE, SALT SALT SALT"
end

注意:因为我将针对LDAP进行身份验证,所以我使用的是除Devise默认值的默认email列以外的其他列。因此,我必须安装设计视图(rails g devise:views)并修改app/views/devise/session/new.html.erb文件以使用user_ldap_id而不是email

注意:我从这些代码段中删除了所有不相关的代码。

1 个答案:

答案 0 :(得分:2)

问题是因为我的模型中没有启用database_authenticable。没有它,将不会生成任何路由。但因为我不需要它,所以没有意义。但是,要解决此问题,我必须安装Devise LDAP Authenticatable并在我的模型中启用它。一旦我这样做并重新启动服务器,就可以访问该路由了。

看一下我在Devise Github repo上创建的这张票。那里的某个人能够引导我完成整个事情。实际上他们的反应非常深刻。

https://github.com/plataformatec/devise/issues/issue/614/#comment_517418

在我的Gemfile中添加了以下内容:

gem 'devise_ldap_authenticatable'

在我的application_users.rb中添加了以下内容:

devise :ldap_authenticatable