mainameiz
@mainameiz
Full-stack web-developer

Как сделать только одну активную сессию в devise?

Хочу сделать так чтобы пользователи могли иметь только одну активную сессию. Т.е. если они заходят с другого браузера, то предыдущая сессия закрывается и открывается новая.

Думал сделать это с помощью хранения сессии в БД (activerecord-session_store gem), но оказалось что обычное удаление записи из бд не убивает сессию и при обновлении страницы просто создается новая запись для сессии в БД.

UPD: забыл сервер перезапустить :-( все работает. удаление сессии из БД работает (т.е. пользователь разлогинивается)
  • Вопрос задан
  • 285 просмотров
Решения вопроса 1
premas
@premas
Full-stack web-developer
Если я правильно понял, то нужно сделать ограничение на одну сессию для одного юзера.
https://github.com/phatworx/devise_security_extension
В Gemfile пишем:
gem 'devise_security_extension'
Запускаем генератор миграции:
rails g devise_security_extension:install
Проверяем полученную миграцию. Должно быть вот так:
class AddSessionLimitableToUsers < ActiveRecord::Migration
  def change
    add_column :users, :unique_session_id, :string, limit: 20
  end
end

Применяем ее:
rake db:migrate
И в модели юзера добавляем к вызову метода devise :session_limitable
class User < ActiveRecord::Base
  devise ..., :session_limitable
  ...
end
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@PolkovnikBrumel
Может, просто запретить активному юзеру еще раз логиниться?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы