遵循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
。
注意:我从这些代码段中删除了所有不相关的代码。
答案 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