Почему оформление проверяет подписанный?
Примеры для разминирования охранники все вроде бы проверяют signed_in?
, Это сбивает с толку меня, потому что кажется signed_in?
не должен быть установлен в true, пока пользователь не пройдёт защитные ограждения. Я думал, что весь смысл охраны был в том, чтобы предотвратить вход.
class EmailConfirmationGuard < Clearance::SignInGuard
def call
if unconfirmed?
failure("You must confirm your email address.")
else
next_guard
end
end
def unconfirmed?
signed_in? && !current_user.confirmed_at
end
end
1 ответ
Я не могу придумать причину, по которой вы захотите запустить стека защиты, если пользователь nil
так что я не уверен. Я думаю, что это скорее всего случайность реализации.
При создании сессии мы делаем это:
def create
@user = authenticate(params)
sign_in(@user) do |status|
if status.success?
redirect_back_or url_after_create
else
flash.now.notice = status.failure_message
render template: "sessions/new", status: :unauthorized
end
end
end
Если authenticate
возвращается nil
Мы все еще входим в стек. Возможно, нам следует подумать не делать этого. Если вы откроете проблему в самом репозитории Clearance, мы можем рассматривать ее как изменение для Clearance 2.0.