【发布时间】:2018-04-15 21:11:02
【问题描述】:
我试图在第一次注册时确认用户,但用户不断收到此错误。当他收到确认电子邮件并单击它时。他得到以下错误
error.log
Started GET "/users/confirmation?confirmation_token=zu1phZ8TaJHNFDJcXWvE" for 127.0.0.1 at 2017-11-03 13:00:02 +0530
(4.2ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC
ArgumentError (Before process_action callback :require_no_authentication has not been defined):
app/controllers/confirmations_controller.rb:2:in `<class:ConfirmationsController>'
app/controllers/confirmations_controller.rb:1:in `<top (required)>'
confirmations_controller.rb
class ConfirmationsController < Devise::ConfirmationsController
skip_before_action :require_no_authentication!
skip_before_action :authenticate_user!
end
首先我以为我没有这个 require_no_authentication! 方法。所以我尝试将此方法的代码放在控制器本身中,但它仍然不起作用。
class ConfirmationsController < Devise::ConfirmationsController
skip_before_action :require_no_authentication!
skip_before_action :authenticate_user!
private
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
end
routes.rb
Rails.application.routes.draw do
devise_for :users, controllers: {
sessions: 'api/v1/sessions',
registrations: 'api/v1/registrations',
passwords: 'api/v1/passwords',
:confirmations => "confirmations"
}
end
【问题讨论】:
-
请用几行堆栈跟踪发布错误
-
我已经更新了我的error.log
标签: ruby-on-rails ruby devise ruby-on-rails-5