Почему оформление проверяет подписанный?

Примеры для разминирования охранники все вроде бы проверяют 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.

Другие вопросы по тегам