PagesController#home

时间:2019-01-22 19:28:31

标签: ruby-on-rails

我正在建立一个网站,用户可以在其中看到多首诗或自己写诗。 我正在使用Devise和Pundit进行身份验证和授权。

当用户转到主链接(http://0.0.0.0:3000/)时,即使他没有登录,我希望他也能够看到该页面。HOME页面只是一个HTML页面,带有一个按钮,如果单击,将重定向到所有诗歌(诗歌控制器)。

但是,我遇到以下错误:

Pundit::AuthorizationNotPerformedError in PagesController#home

application_controller.rb

class ApplicationController < ActionController::Base
  include Pundit

  protect_from_forgery with: :exception
  before_action :authenticate_user!

  after_action :verify_authorized, :except => :index, unless: :devise_controller?
  after_action :verify_policy_scoped, :only => :index, unless: :devise_controller?

  rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized

  private

  def user_not_authorized
    flash[:alert] = "Non sei autorizzato a eseguire questa azione"
    redirect_to(root_path)
  end

end

pages_controllers.rb

class PagesController < ApplicationController
  include Pundit

  skip_before_action :authenticate_user!, only: [:home]
  # skip_after_action :verify_authorized, except: [:home]
  # after_action :verify_authorized, except: [:home]
  # before_action :authenticate_user!, except: [:home,]


  def home
  end
end

我尝试遵循此指南: Pundit::AuthorizationNotPerformedError 但是我一直遇到同样的错误。

我没有创建pages_policy.rb,但我不认为这是问题所在。

1 个答案:

答案 0 :(得分:1)

解决了。 由于PagesController继承自ApplicationController,并且后者包含before_action :authenticate_user!,因此我必须在PagesController中编写以下内容:

class PagesController < ApplicationController
  include Pundit
    skip_after_action :verify_authorized, only: [:home]

    skip_before_action :authenticate_user!, only: [:home]

  def home
  end
end