Devise возвращает 401 в обновленном приложении Rails 3.1 со слегка настраиваемыми маршрутами - PullRequest
0 голосов
/ 22 декабря 2011

Не получается, чтобы пользователь вошел в нашу панель администратора после обновления нашего приложения с Rails 2.3.x до Rails 3.1.3.Я использую последнюю версию Devise, которая на момент публикации была v1.5.3.

A POST на маршрут session#create возвращает ответ 401 (и все параметры выглядяткак будто они входят правильно);это происходит, когда Warden пытается авторизовать пользователя, используя одну из стратегий Devise (:database_authenticatable).Вот моя модель пользователя.

class User < ActiveRecord::Base
  devise :database_authenticatable, :validatable
  attr_accessible :email, :password, :password_confirmation
end

У меня есть переопределено Devise::SessionsController в моем :admin пространстве имен (логины только для администраторов, и у них есть свой собственный макет сайта, таким образом, переопределение).В контроллере нет ничего особенного, кроме макета:

class Admin::SessionsController < ::Devise::SessionsController
  layout "admin"
end

У меня есть слегка настроенные маршруты, и вот код, который я получил для этого.

devise_for :users, :controllers => { :sessions => 'admin/sessions' }

В заголовках моего макета есть бит csrf_meta_tag, а в моем ApplicationController есть строка protect_from_forgery.Ошибки формы пустые, когда она возвращается для повторного рендеринга страницы.

Я прошел через код (вплоть до lib/warden/proxy.rb), и Уорден, похоже, не думает, что :database_authenticatable стратегия, которую я использую, действительна ( исходный код начальника для этой части).Пользователь является действительным пользователем ... Я создал его через сеанс Rails rails console IRB, с нуля, с действительным паролем и всем остальным.Я надеюсь, что он должен признать это как действительное, верно?Или я даже лаю нужное дерево?

1 Ответ

1 голос
/ 23 декабря 2011

Ух ты, я немного дурак. После перехода на стратегию Devise authenticatable мне стало ясно, что в моем файле конфигурации devise.rb (который я скопировал из другого проекта и настроил) был указан :username в качестве ключа аутентификации, а не :email, как это должно было. Изменил его на :email и теперь он работает.

В похожей истории у меня теперь немного неясное понимание того, как Devise работает с Warden.

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