Session 定制设计会话控制器';I don’我没有按预期工作

Session 定制设计会话控制器';I don’我没有按预期工作,session,devise,controller,ruby-on-rails-3.2,customization,Session,Devise,Controller,Ruby On Rails 3.2,Customization,我按照官方指示定制了一些设备控制器: config/routes.rb已修改为: 设计用于:管理员用户,:控制器=>{:注册=>'admin\u用户/注册',:会话=>'admin\u用户/会话'} 已生成视图,并已从应用程序/视图/设计/移动到 /应用程序/视图/管理员/用户/ 我还为管理员用户定制了模型和迁移,以便有一个“活动”列。以便管理员可以手动停用该帐户 基本上,我想要的是,如果用户的admin\u usilizateur.active attribute为false,则该用户不能

我按照官方指示定制了一些设备控制器:

  • config/routes.rb已修改为:

    设计用于:管理员用户,:控制器=>{:注册=>'admin\u用户/注册',:会话=>'admin\u用户/会话'}

  • 已生成视图,并已从应用程序/视图/设计/移动到 /应用程序/视图/管理员/用户/

    我还为管理员用户定制了模型和迁移,以便有一个“活动”列。以便管理员可以手动停用该帐户

基本上,我想要的是,如果用户的admin\u usilizateur.active attribute为false,则该用户不能登录。

这导致我进行以下修改:

class AdminUtilisateurs::SessionsController < Devise::SessionsController

  # Surcharge of 'create' method in Devise::SessionsController
  # Example ressource : http://www.communityguides.eu/articles/10
  def create

    @admin_utilisateur = AdminUtilisateur.find_by_email(params[:email])

    if @admin_utilisateur.present? && @admin_utilisateur.active
      super

    else
      flash.now[:alert] = t('devise.failure.desactive')
      render :new and return

    end
  end
end
class Administrators::SessionsController
现在的情况是Rails使用了正确的定制“创建”方法app/controllers/admin\u usilizateurs/sessions\u controller.rb

如果用户没有被管理员“激活”(admin_usilizateur.active=false),那么我得到了正确的FLASH消息,但是RAILS验证了它! 因此,用户仍然能够访问所有的资源,即使是那些由各自控制器中的“before_filter:authenticate_admin_Usiateur!”指令保护的资源

看起来Rails si仍在某种程度上进行身份验证,尽管“create”方法没有编码这样做

欢迎任何帮助!
非常感谢

好的,我看到的唯一解释是关于Desive控制器顶部的这个prepend_before_filter调用:

prepend_before_filter :allow_params_authentication!, :only => :create
RDoc说:告诉典狱长,该特定页面允许使用params身份验证

我也不明白典狱长是怎么工作的

无论如何

我用维基提供的另一种解决方案解决了我的问题:

所以我回滚了我的迁移。我修改了ii,以使列:DeActive变为:approved。我迁移。我用以下内容修改了我的模型应用程序/models/admin_usilimateur.rb:

def active_for_authentication? 
  super && approved? 
end 

def inactive_message 
  approved?  ? super : :not_approved 
end
我在config/locales/fr.yml中添加了所需的键

而且效果很好!!!为什么让事情变得容易总是那么难,让事情变得困难又那么容易;-)