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用户/会话'}
- 已生成视图,并已从应用程序/视图/设计/移动到 /应用程序/视图/管理员/用户/ 我还为管理员用户定制了模型和迁移,以便有一个“活动”列。以便管理员可以手动停用该帐户
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中添加了所需的键
而且效果很好!!!为什么让事情变得容易总是那么难,让事情变得困难又那么容易;-)