我有before_filter
通常验证每个控制器;但是我不会将它用于某个控制器。但是,当我从该控制器访问特定操作时,出于某种原因,我收到一条错误,说明Rails - wrong number of arguments (:force => true?)
用于身份验证。我在方法中添加了一个参数,以查看传递给方法的内容,并将其视为参数{:force=>true}
。任何其他控制器操作都不会发生这种情况。
这是我的错误
ArgumentError in RegistrationsController#edit
wrong number of arguments (1 for 0)
Rails.root: *
Application Trace | Framework Trace | Full Trace
app/controllers/application_controller.rb:6:in `authenticate_user!'
这是我尝试访问的路线
edit_user_registration GET /users/edit(.:format) registrations#edit
这是我的控制器
class RegistrationsController < Devise::RegistrationsController
def build_resource(*args)
super
if session[:omniauth]
@user.apply_omniauth(session[:omniauth])
@user.valid?
end
end
def edit_password
end
end
这是before_filter方法
class ApplicationController < ActionController::Base
protect_from_forgery
private
def authenticate_user!
unless signed_in?
redirect_to '/users/sign_in'
end
end
end
顺便说一下,路线是由设计提供给我的
答案 0 :(得分:4)
过滤器由devise
提供,因此请勿尝试弯曲。
在必需的controllers
中使用它。
before_filter :authenticate_user!
如果您正在寻找处理未经身份验证的用户,可以在routes
文件中执行此操作
authenticated :user do
root :to => "users#index"
end
unauthenticated :user do
devise_scope :user do
get "/" => "sessions#new"
end
end
希望下面部分已经设置
devise_for :users, :controllers => {:registrations => "registrations", :sessions => "sessions"}