2017-02-04 9 views
0

Возможно ли принудительное выключение для некоторых пользователей через Devise.Отключение принудительного выхода для некоторых пользователей из Rails App

В моей настройке я использую рельсы 4.1.15 с Devise 1.5.4. Сессии сохраняются в db, и нет прямого сопоставления с идентификаторами пользователя. Есть ли способ Devify для выхода из системы с некоторыми пользователями, НЕ ВСЕМИ.

Я попытался сбросить пароль в качестве прокси-сервера, который выходит из системы немедленно, но не всегда.

user_obj.update_attributes(:password => "some_random_string") 
+0

Вам нужно сделать это в консоли контроллера или рельсов? –

+0

В контроллере, например, администратор сможет удалить/аннулировать сеанс для списка пользователей не сам? И есть миллионы записей в сеансе db, но не для того, чтобы удалить сеанс для 10 пользователей. – user3173122

ответ

0

Я могу предложить вам следующее решение.

Добавить новый столбец admin, что под названием force_logout:boolean

В любом контроллере добавить новое действие, чтобы установить force_logout в true. Напр .:

# in admins_controller.rb 

def force_logout 
    admin = Admin.find(params[:id]) 
    admin.update_column(:force_logout, true) 
    redirect_to :back 
end 

В application_controller.rb добавить before_action выйти из системы пользователя, если force_logout является true

before_action :check_force_logout 

def check_force_logout 
    if current_user && current_user.force_logout? 
    current_user.update_column(:force_logout, false) 
    sign_out(current_user) 
    end 
end 

Слишком вам нужно сбросить force_logout столбец после админ будет подписан. Как правило, вы можете сделать это session_controller.rb в действии create ,

+0

Вышеупомянутое решение не выйдет из системы немедленно, оно будет, когда пользователь попытается войти в следующий раз, который я не хочу. Я просто хочу удалить их текущие активные сеансы, а не тот, когда пользователь пытается войти в следующий раз. Я не хочу удалить сеанс, который создается после установки поля выхода из системы в значение true. – user3173122

+0

Нет, 'check_force_logout' вызывается для каждого запроса и будет немедленно выходить из системы. Вероятно, нужно добавить перенаправление после sign_out() –

+0

Да, как я уже говорил выше, он будет работать. Но я хочу уничтожить активные сеансы. Ваше вышеупомянутое решение не удастся даже тогда, когда подлинный вход пытается открыть из другого браузера с совершенно новым сеансом, поскольку флаг по-прежнему установлен в true. Я не хочу ждать следующего запроса. Я хочу сделать это на уровне администратора. – user3173122