domingo, 30 de novembro de 2014

Bloqueando múltiplas autenticações com o mesmo usuário no Laravel 4.2

Olá galera,

Há algum tempo, precisei destruir a sessão mais antiga de um usuário caso ele efetuasse login em outra máquina ou em outro navegador. Dessa forma, queria garantir que teríamos o mesmo usuário logado somente uma única vez com a sessão mais nova.

Fiz uma implementação que acredito não ser a melhor solução mas resolveu o meu problema. Vale lembrar que a solução foi utilizando o Session Driver do tipo file.

O código abaixo foi utilizado no controller de usuário após validação dos dados de login onde foi retornado o id do usuário.

    $files = \File::allFiles(storage_path().'/sessions');
    $name = Auth::getName();

    foreach ($files as $file) {
      $session  = unserialize(\File::get($file));
      if(isset($session[$name])) {
        if($session[$name] == $usuario_id) {
          \File::delete($file);
        }
      }
    }
  

Na linha 1, são acessados todos os arquivos de sessão gerados na aplicação.

Na linha 2, é capturado o valor do identificador único da sessão.

Nas linhas 4 e 5, são capturados o conteúdo de cada arquivo da sessão e convertido para dados serializados para o formato de array.

Na linha 6, é realizada uma checagem para ver se existe algum usuário logado com aquele identificador único.

Na linha 7, é feita uma comparação entre o id do usuário retornado na consulta do login com o id da sessão já armazenada no file.

Na linha 8, é apagado o arquivo da sessão mais antiga que se encontra armazenado no diretório sessions.

OBS: Com a remoção do arquivo gerado na sessão é necessário realizar a checagem com Auth::check() e fazer o redirecionamento caso a sessão do usuário não exista mais.

Conhece outra solução ou fez de outra forma? Compartilhe conosco.

Um grande abraço a todos e até a próxima.

Nenhum comentário:

Postar um comentário