Разработать ограничение на один сеанс для каждого пользователя за раз

В моем приложении используются Rails 3.0.4 и Devise 1.1.7.

Я ищу способ запретить пользователям делиться учетными записями в качестве app - это услуга на основе подписки. Я искал больше недели и до сих пор не знаю, как реализовать решение. Я надеюсь, что кто-то реализовал решение и укажет мне правильное направление.

Решение (Спасибо всем за ваши ответы и понимание!)

В application controller.rb

before_filter :check_concurrent_session

def check_concurrent_session
  if is_already_logged_in?
    sign_out_and_redirect(current_user)
  end
end

def is_already_logged_in?
  current_user && !(session[:token] == current_user.login_token)
end

В session_controller, который переопределяет контроллер Devise Sessions:

skip_before_filter :check_concurrent_session

def create
  super
  set_login_token
end

private
def set_login_token
  token = Devise.friendly_token
  session[:token] = token
  current_user.login_token = token
  current_user.save
end

При миграции AddLoginTokenToUsers

def self.up
  change_table "users" do |t|
    t.string "login_token"
  end
end

def self.down
  change_table "users" do |t|
    t.remove "login_token"
  end
end
47
задан John 16 August 2011 в 21:26
поделиться