在将我们的应用程序从 Rails 2.3.x 升级到 Rails 3.1.3 后,我似乎无法让用户登录到我们的管理面板。我正在使用最新版本的 Devise,在本文发布时它是 v1.5.3。
A POST
to session#create
route 返回一个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
),Warden 似乎并不认为:database_authenticatable
我使用的策略是有效的(Warden's source code for that part)。该用户是一个有效用户……我通过 Rails rails console
IRB 会话从头开始创建它,并使用有效密码和所有内容。我希望它应该承认这是有效的,对吧?或者我什至在吠叫正确的树?