Pundit работает правильно, но для неавторизованных пользователей возвращается 200 вместо 401
У меня есть спецификации, как это:
it "should let a user destroy their own picture" do
expect do
delete :destroy, { id: p1.id }
puts "\n\nOK resp\n#{response.status}\n\n\n"
end.to change { Picture.count }.by(-1)
end
it "should not let a user delete another user's picture" do
sign_in(user2)
expect do
delete :destroy, { id: p1.id }
puts "\n\nNOT OK resp\n#{response.status}\n\n\n"
end.to change { Picture.count }.by(0)
end
Первый правильно возвращает 302
(Я перенаправляю после уничтожения). Второй правильно проходит, то есть пользователь не может уничтожить, но возвращает 200
код состояния, вместо 401
как и должно вернуться.
В моем ApplicationController
:
class ApplicationController < ActionController::Base
include Pundit
rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized
def user_not_authorized
render file: "public/401.html", status: :unauthorized
end
...
end
С или без rescue from
линия, я все еще получаю 200
, Кажется, что пока pundit
правильно ловит true
или же false
в authorize(@obj)
метод и остановка выполнения, но это не поднимает, когда он получает false
,
Как я могу это исправить?