在将我们的应用程序从Rails 2.3.x升级到Rails 3.1.3后,我似乎无法让用户登录我们的管理面板。我正在使用最新版本的Devise,在本文发表时是v1.5.3。
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
),Warden似乎认为我使用的:database_authenticatable
策略无效(Warden's source code for那部分)。用户是一个有效的用户...我已经通过Rails rails console
IRB会话从头开始创建它,并使用有效的密码和所有内容。我希望它应该认为有效,对吗?或者我甚至吠叫正确的树?
答案 0 :(得分:1)
authenticatable
策略后,我清楚地知道在我的devise.rb
配置文件(我从另一个项目中复制并调整过)中:username
列为authentication_key,并且不应该像:email
那样。将其更改为:email
,现在可以正常使用。
在一个相关的故事中,我现在对Devise如何与Warden合作有些模糊不清。