我按照官方说明定制了一些 Devise 的控制器:
config/routes.rb 已修改为:
devise_for :admin_utilisateurs, :controllers => {:registrations => 'admin_utilisateurs/registrations', :sessions => 'admin_utilisateurs/sessions'}
视图已生成并从 app/view/devise/ 移动到 /app/view/admin_utilisateurs/
我还为 admin_utilisateurs 定制了模型和迁移,以便拥有一个“活动”列。以便管理员可以手动停用该帐户。
基本上,我想要的是,如果用户的 admin_utilisateur.active 属性为假,则用户不应该能够登录。
这导致我进行以下修改:
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
如果管理员没有“激活”用户(admin_utilisateur.active = false),那么我收到了正确的 FLASH 消息,但是 RAILS 对其进行了身份验证!所以用户仍然可以访问所有资源,即使是那些由“before_filter :authenticate_admin_utilisateur!”保护的资源。指令在他们各自的控制器。
看起来 Rails si 仍然以某种方式进行身份验证,尽管“创建”方法没有编码这样做。
欢迎任何帮助!非常感谢