Rails3 / Devise: неопределенный метод new_application_user_session_path - PullRequest
1 голос
/ 04 ноября 2010

Следуя документации 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, я использую другой столбец, отличный от столбца email по умолчанию, для которого по умолчанию используется Devise.В результате мне пришлось установить представления Devise (rails g devise:views) и изменить файл app/views/devise/session/new.html.erb, чтобы использовать user_ldap_id вместо email.

ПРИМЕЧАНИЕ: Я удалиллюбой не относящийся к делу код из этих фрагментов.

1 Ответ

2 голосов
/ 04 ноября 2010

Проблема была в том, что в моей модели не было включено database_authenticable.Без этого маршруты не будут созданы.Но поскольку мне это не нужно, в этом не было никакого смысла.Однако, чтобы решить эту проблему, мне пришлось установить Devise LDAP Authenticatable и включить его в моей модели.Как только я это сделал и перезапустил сервер, маршрут стал доступен.

Посмотрите на этот билет, который я создал в репозитории Devise Github.Кто-то смог провести меня через все это.На самом деле очень впечатлен их отзывчивостью.

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

В мой Gemfile добавлено следующее:

gem 'devise_ldap_authenticatable'

Добавил следующее в мой application_users.rb:

devise :ldap_authenticatable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...