No release in over 3 years
Low commit activity in last 3 years
Provides automatic session timeout in a Rails Devise application.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

Runtime

~> 4
~> 5
 Project Readme

Devise Automatic Logout

By Thadeu Esteves Jr.

Provê um logout automático da sessão numa aplicação Rails utilizando Devise. É simples e fácil. Faz com que a sessão seja destruída após a conclusão do tempo estipulado. É de grande ajuda em sistemas que necessitam de sessão auto destrutiva, evitando de o usuário ficar logado por muito tempo de forma ociosa.

O que isso faz?

  • Força o usuário a sair da sessão (logout)
  • Opção de mostrar um timer regressivo
  • Opção de dar um alerta na tela ao ser deslogado

Começando

Adicione ao seu Gemfile

gem 'devise-automaticlogout', '~> 1.0.2'

Rode o bundle install

Configure o controller

No controller que você deseja aplicar o timer para o devise, use:

devise_automatic_logout

Por exemplo, para o comum ApplicationController, poderia ser

class ApplicationController < ActionController::Base
  devise_automatic_logout
end

Isso por si só, já prepara a aplicação para ler os dados do Devise#timeout_in, utilizando o scope padrão user e uma mensagem padrão de alerta.

Mas se você quiser, configurar um tempo diferente do timeout_in do devise? Fácil, use o seguinte:

devise_automatic_logout time: 1.hour.to_i

Isso vai aplicar 1 hora para o logout automático.

Mas e se você quiser colocar outra mensagem? Fácil, use o seguinte:

devise_automatic_logout time: 1.hour.to_i, message: 'SUA MENSAGEM'

Mas e se você quiser fazer, com que seja utilizado outro tipo de mapping do devise? Fácil, use o seguinte:

devise_automatic_logout scope: 'member'

É possível também utilizar todos de uma vez só, por exemplo

devise_automatic_logout time: 15.minutes.to_i, message: 'Sua sessão expirou! Faça login novamente.', scope: 'member'

OBS: Quando o time não é passado, o timeout_in do devise será aplicado, se configurado, é claro!

Configurando Timeoutable

Veja na documentação do próprio devise como fazer isso.

Configurar o tempo

Mais informações sobre Timeoutable

Configurando o timer regressivo (OBRIGATÓRIO)

Esse helper deve ser usado em qualquer view, ele é importante, pois tudo será baseado nele

<%= regressive_timer visible: true, alert: true %>
  • visible: mostra um timer regressivo
  • alert: lança um window.alert se ativado, ao final do timer

E se você quiser, que uma determinada action ou um controller todo, não execute o timer? É fácil também, olha só.

class DashboardController < ApplicationController
  prepend_before_action { request.env['devise.skip_timeout'] = true }

  def index; end
end

Se quiser saber mais sobre isso, acesse a Wiki do Devise

Configurando Javascript

Adicione no seu application.js, o seguinte:

//= require automatic_logout

Se você usa vanilla js, adicionar também o seguinte:

//= require automatic_logout/classic

Se você usa jQuery, use:

//= require automatic_logout/jquery

Se você usa Turbolinks mais atual, use:

//= require automatic_logout/turbolinks

Se você usa Turbolinks mais antigo, use:

//= require automatic_logout/turbolinks-classic

Se preferir, use manualmente em algum momento desejado

AutomaticLogout.load();

Contributing

We have a long list of valued contributors. Check them all at: https://github.com/Thadeu/devise-automaticlogout.