我正在尝试自定义Devise模型(Admin)并对登录执行一些检查。然后我添加了一些需要在创建会话之前进行验证的字段。
已为Admin模型生成控制器和视图。
继承的会话控制器如下所示:
class Admins::SessionsController < Devise::SessionsController
# before_action :configure_sign_in_params, only: [:create]
# GET /resource/sign_in
# def new
# super
# end
# POST /resource/sign_in
# def create
# super
# end
# DELETE /resource/sign_out
# def destroy
# super
# end
protected
# If you have extra params to permit, append them to the sanitizer.
# def configure_sign_in_params
# devise_parameter_sanitizer.permit(:sign_in, keys: [:attribute])
# end
end
其中一项验证是针对存储的值检查当前日志记录的管理IP地址(在管理员创建后手动填充专用字段)。
我有两个问题:
protected
和private
方法(此处:https://github.com/plataformatec/devise/blob/master/app/controllers/devise/sessions_controller.rb)super
的create方法,并附加一个after_action :check_validity
来检查新登录管理员的IP吗?或者我应该努力调整原始的创建方法? 答案 0 :(得分:1)
回答你的问题:
所有protected
方法都将从父控制器继承。但是,您无法直接从private
调用父{h} Admins::SessionsController
方法。所有before_action
都将正常执行,您不需要在继承的类中复制它们。
我同意明治先生的意见。你可能应该让你的IP检查before_action
,以便它在父create
方法向用户呈现页面之前发生。但是,在current_admin
执行之前,您将无法使用super
,因此您需要找到另一种识别管理员用户的方法,或者您应该完全修改create
方法而不使用super
。
您也可以查看this question的解决方案。