我按照正式指示定制了一些Devise的控制器:
config / routes.rb已修改为:
devise_for:admin_utilisateurs,:controllers => {:registrations => 'admin_utilisateurs / registrations',:sessions => 'admin_utilisateurs /会话'}
已生成视图并已从app / view / devise /移至 /应用程序/视图/ admin_utilisateurs /
我还为admin_utilisateurs定制了模型和迁移,以便拥有一个“活动”列。这样管理员可以手动停用该帐户。
基本上,我想要的是,如果用户的admin_utilisateur.active attribut为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
正在发生的事情是Rails转到app / controllers / admin_utilisateurs / sessions_controller.rb的正确定制'create'方法
如果用户未被管理员“激活”(admin_utilisateur.active = false),那么我收到了正确的FLASH消息,但RAILS会对其进行身份验证! 因此,用户仍然可以访问所有资源,即使是那些由“before_filter:authenticate_admin_utilisateur!”守护的资源。各自控制人员的指示。
看起来Rails仍然以某种方式进行身份验证,尽管“创建”方法没有编码来执行此操作。
欢迎任何帮助! 非常感谢
答案 0 :(得分:0)
好的,我看到的唯一解释是关于设计控制器顶部的 prepend_before_filter 调用:
prepend_before_filter :allow_params_authentication!, :only => :create
RDoc说:告诉看守,该特定页面允许使用params身份验证。
我不明白监狱长是如何运作的。
无论如何!
我用wiki给出的另一个解决方案解决了我的问题:Require admin to activate account before sign_in
所以我回滚了我的迁移。我修改了ii,以便列:desactive变为:approved。我迁移。我使用以下内容修改了我的模型app / models / admin_utilisateur.rb:
def active_for_authentication?
super && approved?
end
def inactive_message
approved? ? super : :not_approved
end
我在config / locales / fr.yml
中添加了所需的密钥它很棒!为什么总是这么容易变得容易,而且很容易使它变得困难; - )