Как остановить вход в систему с мягким удалением пользователя с помощью Devise

В настоящее время я использую Devise для регистрации / аутентификации пользователей в проекте Rails. Когда пользователь хочет отменить свою учетную запись, объект пользователя мягко удаляется следующим образом:

Как «мягкое удаление» пользователя с помощью Devise

Таким образом, мое внедрение имеет небольшое отличие. Модель пользователя имеет атрибут deleted_flag. И метод soft_delete выполняет «update_attribtue (: deleted_flag, true)»

Но я должен реализовать действие sign_in. По моему мнению, следующее.

class SessionsController < Devise::SessionsController
  def create
    resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#new")    

    if resource.deleted_flag
      p "deleted account : " + resource.deleted_flag.to_s
      sign_out(resource)
      render :controller => :users, :action => :index
    else
      if is_navigational_format?
        if resource.sign_in_count == 1
          set_flash_message(:notice, :signed_in_first_time)
        else
          set_flash_message(:notice, :signed_in)
        end
      end
      sign_in(resource_name, resource)
      respond_with resource, :location => redirect_location(resource_name, resource)
    end
  end
end

Я думаю, что в этом коде есть странные точки.

Если удаленный пользователь пытается войти, система разрешает регистрацию и немедленно выполняет выход. И система не может отображать сообщение flash [: alert] ...

Я хочу знать два момента.

  1. Как мне реализовать запрет на вход удаленных пользователей в систему?
  2. Как реализовать отображение flash [: alert] когда удаленный пользователь пытается войти в систему?

6
задан Community 23 May 2017 в 12:00
поделиться