我知道已经有一些关于此问题的堆栈溢出问题,但它们并没有帮助解决我的问题。
我有一个自定义用户注册控制器,它继承了设计注册控制器,即:
class UsersController < Devise::RegistrationsController
我想在设计注册控制器中禁用身份验证过滤器。即禁用此行:
class Devise::RegistrationsController < DeviseController
prepend_before_filter :require_no_authentication, only: [ :new, :create, :cancel ]
因此无需身份验证即可编辑用户。
其他堆栈溢出答案建议跳过自定义控制器中的过滤器,即
class UsersController < Devise::RegistrationsController
skip_before_filter :require_no_authentication
end
但这对我不起作用。当我尝试编辑用户时,会显示一个页面:
you need to sign in or sign up before continuing.
我不认为我的路由是一个问题。我的路线是:
devise_for :users, :skip => [:sessions, :registrations, :passwords]
devise_scope :user do
resources :user
end
谢谢,非常感谢
答案 0 :(得分:0)
你正在寻找这样的东西:
skip_before_filter :authenticate_user!, :only => [:edit]
您禁用的前置过滤器不用于跳过授权。它用于检查现有的有效会话是否已存在。重定向和消息在最后几行中暗示了这一点。如果希望用户能够在不注销的情况下切换会话,或者作为保护旧会话不被恢复的安全措施,这是非常方便的。
# Helper for use in before_actions where no authentication is required.
#
# Example:
# before_action :require_no_authentication, only: :new
def require_no_authentication
assert_is_devise_resource!
return unless is_navigational_format?
no_input = devise_mapping.no_input_strategies
authenticated = if no_input.present?
args = no_input.dup.push scope: resource_name
warden.authenticate?(*args)
else
warden.authenticated?(resource_name)
end
if authenticated && resource = warden.user(resource_name)
flash[:alert] = I18n.t("devise.failure.already_authenticated")
redirect_to after_sign_in_path_for(resource)
end
end
答案 1 :(得分:-1)
应用以下内容:
class Users::RegistrationsController < Devise::RegistrationsController
skip_before_action :require_no_authentication
end