0

在将我们的应用程序从 Rails 2.3.x 升级到 Rails 3.1.3 后,我似乎无法让用户登录到我们的管理面板。我正在使用最新版本的 Devise,在本文发布时它是 v1.5.3。

A POSTto session#createroute 返回一个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布局的标题中有一点,我的里面ApplicationControllerprotect_from_forgery一行。当它返回重新呈现页面时,表单的错误是空的。

我已经逐步完成了代码(一直到lib/warden/proxy.rb),Warden 似乎并不认为:database_authenticatable我使用的策略是有效的(Warden's source code for that part)。该用户是一个有效用户……我通过 Rails rails consoleIRB 会话从头开始创建它,并使用有效密码和所有内容。我希望它应该承认这是有效的,对吧?或者我什至在吠叫正确的树?

4

1 回答 1

1

哇,我有点傻。在进入 Devise 的authenticatable策略之后,我很清楚,在我的devise.rb配置文件(我从另一个项目中复制并调整)中已:username列为 authentication_key,而不是:email它应该是的。将其更改为:email现在可以正常工作。

在一个相关的故事中,我现在对 Devise 如何与 Warden 合作有了一些模糊的理解。

于 2011-12-22T20:39:24.427 回答