我正在建立一个网站,用户可以在其中看到多首诗或自己写诗。 我正在使用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
,但我不认为这是问题所在。
答案 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