С ЧИТАТЬ :
Pundit отслеживает, вызвали ли вы authorize
в любом месте действия вашего контроллера. Pundit также добавляет метод к вашим контроллерам под названием verify_authorized
...
Pundit также добавляет verify_policy_scoped
к вашему контроллеру. Это вызовет исключение, подобное verify_authorized
. Однако он отслеживает, используется ли policy_scope
вместо authorize
.
Вы смешали два метода. Вы позвонили authorize
, но проверяете, был ли вызван policy_scope
.
policy_scope
обычно используется для коллекций записей (например, вашего примера или более типично index
действий), тогда как authorize
обычно используется для отдельных записей (например, show
/ edit
/ update
/ destroy
действий).
В вашем случае, однако, то, что у вас есть в данный момент, вовсе не обязательно требует политики - все, что вы проверяете, это то, вошел ли пользователь в систему!
Если требуется, чтобы пользователь вошел в систему, но это не так, тогда ваше приложение должно ответить с ошибкой 401
, а не 403
. Вы можете сделать это, например, с before_action :authorize
в вашем контроллере. (Зависит от того, как вы реализовали авторизацию - смотрите документацию по используемой вами библиотеке, например, devise
).