segunda-feira, 24 de fevereiro de 2014

Autenticação e ACL com Laravel 4.1 - Final

Olá galera,

Nesse último vídeo, vamos adicionar o filtro de ACL a nossa aplicação. Como nos vídeos anteriores, recomendo que a visualização do vídeo seja feita em alta resolução, de preferência em HD, por conta dos códigos exibidos.

Os arquivos que foram gerados podem ser baixados aqui. Fiquem a vontade para enviar dúvidas ou sugestões.

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

73 comentários:

  1. Muito obrigado pelos posts!!!
    Acompanhei todos de autenticação e era exatamente o que eu precisava! Parabéns!

    ResponderExcluir
    Respostas
    1. Olá João,
      Muito obrigado pelas felicitações e por acompanhar o blog.
      Um abraço

      Excluir
  2. Olá! parabéns seus videos são otimos.
    Estou trabalhando com laravel autenticacao, porem esta gerando erro na seguinte linha "->with('info', Util::message('MSG008'));"

    Veja a mensagem:

    1. Symfony\Component\Debug\Exception\FatalErrorException
    …/­app/­controllers/­UsuariosController.php38


    Redirect::to('welcome')
    ->with('info', Util::message('MSG008'));
    }

    Segui rigorosamente suas aulas, o que pode ser?
    nelsonss63@hotmail.com

    ResponderExcluir
    Respostas
    1. Olá Nelson, obrigado !!!

      As outras mensagens flash estão sendo exibidas ?! Nessa parte só é feita a leitura do message.json que se encontra dentro da pasta public. A função que faz isso está na pasta app/library/util.php.

      Excluir
    2. Olá! PROFESSOR!!!

      Resolvido

      Só acrescentei a pasta library no diretorio app/start/global.php e depois executei o comando composer update e tudo esta funcionando corretamente.

      Quando termina uma aplicação é bom executar o comando composer update?

      Excluir
    3. Vou refazer, pois estou com muita 'fome' de aprender...

      Além do seu tutorial vc poderia me indicar mar alguns que possui video e codigo fonte para eu praticar?

      Valeu pelos videos ...

      Excluir
    4. Olá Nelson,

      Ótimo que o problema tenha sido resolvido. Não é necessário utilizar o composer não.

      Você chegou a ver a outra série publicada em setembro de 2013 ?! Eu sempre dou uma olhada no Youtube e no site http://www.laravel.com.br/. O pessoal sempre posta várias dicas úteis.

      Um abraço

      Excluir
  3. ola amigo... parabens pelos videos... sao de otima qualidade! estou com um problema... na verdade é mais questao do wamp(acredito). ao enviar a imagem o laravel ta dando esse erro "Unable to guess the mime type as no guessers are available (Did you enable the php_fileinfo extension?)". vi q tem algo haver com o modulo php_fileinfo.. fui no wamp e habilitei o mesmo(tanto pelo sistema como direto pela pasta) habilitei tbm o mesmo modulo q fica dentro do php do apache... nao obtive resultado positivo. vc sabe me dizer se pode ser outra coisa? aguardo resposta...

    ResponderExcluir
    Respostas
    1. Olá Marcilio,

      Muito obrigado pelos elogios. Como estamos fazendo a manipulação de imagem, utilizo o recurso da GD. Ela está habilitada ?! Aqui eu não tenho esse problema porque eu faço a instalação do PHP, Apache e MySQL manualmente.

      Um abraço

      Excluir
  4. Muito bom sesus vídeos, posta o código fonte no github acho que ficará mais simples para pegar. Eu baixei o código do primeiro curso de laravel e não veio por completo.

    ResponderExcluir
    Respostas
    1. Olá Waib,

      Obrigado pelos elogios. Estarei postando no github nos próximos tutoriais. De qualquer forma, o código base usado na primeira série do vídeo pode ser baixado pelo link https://docs.google.com/file/d/0B__Rg9h09RtfU3BvNFlILXRlSmM/edit. A partir daí basta você ir baixando somente os arquivos alterados conforme os vídeos.

      Um abraço

      Excluir
  5. Cara parabéns pelos seus videos.. Gostei bastante só tenho uma dúvida como configurar na rota para que seja possível cadastrar usuário na própria tela de login .. tirei o UsuarioController do grupo de rota que filtra a autenticação e mesmo assim n deu certo.. Estarei a espera de sua resposta..

    ResponderExcluir
    Respostas
    1. Olá Rodrigo,

      Primeiramente você vai precisar criar duas rotas. Uma GET e uma POST de forma similar ao que tem nas rotas para o login. Lembrando que elas devem estar fora do Route::group. Aí agora é implementar os dois metódos dentro do controller de usuário.

      Próximo passo é alterar a tela de login e acrescentar a chamada ao metódo GET que você criou que vai permitir o cadastro do usuário.

      Caso você queria utilizar o metódo de adicionar que já existe para o cadastro de usuário será necessário escrever todas as rotas manualmente sem utilizar o Route::resource para usuários. Fora que você terá de mexer no formulário de cadastro para não deixar o usuário escolher o perfil dele e tratar o redirecionamento.

      Qualquer dúvida é só postar aí

      Abraço

      Excluir
  6. Tá certo. Outra duvida que tenho é o seguinte quero pegar o id do usuário que está logado e jogar dentro de um campo de uma tabela no banco de dados, isso sem um combobox, fazer de forma automática no momento em que o usuário estiver logado. Sei que posso resolver isso utilizando Sessão, porém minha pergunta é tem uma forma mais simples de fazer isso utilizando daquele modelo que tu fez para desenvolvimento da autenticação no laravel?

    ResponderExcluir
    Respostas
    1. Olá Rodrigo,

      Na minha visão, a forma mais simples é utilizar o próprio Auth do Laravel. Assim a qualquer momento você pode persistir o id do usuário logado na aplicação. Você pode experimentar printar Auth::user()->id e verificar se é o resultado que você deseja.

      Um abraço

      Excluir
  7. Tentei fazer isso cara .Coloquei no controller dai ele deu erro de inserção por este campo ser required.. Criei até um campo no create.blade mas quando coloco a variavel user_id diz que não tem no foreach.. Como seria?

    ResponderExcluir
    Respostas
    1. Você pode adicionar um campo antes do validador.

      $input = Input::all();
      $input['user_id'] = Auth::user()->id;


      Estou partindo do princípio que seu campo no banco de dados seja user_id. Acredito que com isso deva funcionar.

      Abraço

      Excluir
  8. Ola Benicio, gostaria de te parabenizar pelo conteudo em seu site. Acompanhei todas aulas sobre autenticaçao e acl, era o que eu estava precisando.
    Queria ver contigo o seguinte no arquivo de cache teria como deixar ele criptografado para nao ficar exposto as informaçoes dos metodos e do usuario??
    E tambem queria ver contigo o seguinte: uma suposiçao se o usuario nao tem permissao de acessar veiculos teria como nao mostrar no menu o link de veiculos?
    Se tiver como mostrar como fazer eu iria agradecer muito.
    Abraçao.

    ResponderExcluir
    Respostas
    1. Olá Tiago,

      Muito obrigado por acompanhar o blog.

      Respondendo a primeira pergunta. Se você observar eu guardo um array no cache. Você poderia utilizar um serialize e base64_encode para ofuscá-lo, mas se você quiser mais segurança recomendo usar o mcrypt. Vou ressaltar que não testei na prática mas acredito que deve funcionar.

      Respondendo a segunda pergunta. Eu montei uma macro que monta o menu verificando se o cara tem permissão. Poderia colar aqui no blog mas fica um tanto confuso. Basicamente eu monto o menu com um foreach e faço a checagem com a permissão do usuário logado. Caso você não consiga eu posso te mandar por e-mail ou então eu faço um post para ficar mais organizado.

      Um abraço

      Excluir
    2. Cara se puder postar aqui ou manda essa solução por email pra mim fico interessado nessa proposta (rodrigo-demolidor@hotmail.com). E fica a pergunta, vai projetar novas video aulas relacionado a laravel? Aguardo'

      Excluir
    3. Olá Rodrigo,

      Terminei de enviar para seu e-mail uma macro que eu criei para o menu. No momento estou enrolado com alguns projetos mas em breve devo postar novas vídeo aulas sobre o Laravel.

      Abraço

      Excluir
    4. E gostaria sim brother. valew. Podes mandar para tiago@hospedashop.com .
      Abraço.

      Excluir
  9. Cara seguinte no laravel atualmente to executo localhost/nome_diretorio/public como deixo só localhost/nome_diretorio? Lembrando que to usando windows

    ResponderExcluir
    Respostas
    1. Olá Rodrigo,

      Eu uso sempre VirtualHost então não passo por esse problema, mas acredito que você está procurando uma solução como a desse tutorial http://creolab.hr/2013/03/removing-the-public-segment-in-a-laravel-4-app/

      Abraço

      Excluir
  10. Opa bom dia..Quando voltam os vídeos? Vi que você curte muito sobre mapas geolocalização e etc. Quando der poderia disponibilizar uns tutoriais disso no laravel? Tipo um sisteminha de geolocalização usando o PostGis por exemplo. Curtiria bastante um exemplo destes, se puder um dia acatar essa ideia.

    ResponderExcluir
    Respostas
    1. Olá Rodrigo,

      Acredito que na segunda metade de agosto agora vou estar fazendo novos vídeos. Inclusive está na lista um vídeo de Geo com Laravel. Pode deixar que a idéia já está acatada.

      Grande abraço

      Excluir
    2. Cara desculpa novamente incomodar.. Surgiu uma dúvida .. Num de suas aulas você faz uma máscara para preço usando o data-mask. Tentei usar esse data-mask para máscara de cpf e telefone porém o resultado não foi como esperado. Como seria criar estas máscaras? Ou então atribuir um id a um campo e fazer via jQuery. Fazer a máscara eu sei, mas não consegui atribuir id a um campo naquela maneira diferente de se construir formulários com o blade

      Excluir
    3. Olá Rodrigo,

      Sem problemas cara. Incomodo nenhum. A máscara para CPF seria algo assim {{ Form::text('cpf', Input::old('cpf'), array('data-mask' => '000.000.000-00', 'data-mask-reverse' => 'true')) }}, já a do telefone seria assim {{ Form::text('telefone', Input::old('telefone'), array('data-mask' => '(00) 0000-0000', 'data-mask-reverse' => 'true')) }}

      Gosto de escrever assim porque evita ficar escrevendo Javascript.

      Grande abraço

      Excluir
  11. Opa queria agradecer pela ajuda, pois consegui solucionar o problema. To com outra dúvidas quero implantar uma funcionalidade no sistema, exatamente a do google maps. http://www.princiweb.com.br/demos/google-maps-api-v3-busca-endereco-autocomplete/
    Nesse link já está rodando o projeto. Peguei o projeto no github e importei pro meu no laravel. O problema é que a view index nao foi construída utilizando princípios do blade. Daí quando vou jogar no projeto está dando erro. Há a necessidade de se ter um controller só para mostrar essa página no sistema? Visto que os arquivos de origem desta funcionalidade é apenas js css e html, nada de banco de dados, nem de linguagem server side.

    ResponderExcluir
    Respostas
    1. Olá Rodrigo,

      A criação do controller nesse caso é opcional. Você pode criar a rota e colocar a chamada diretamente na rota. A criação da rota é obrigatória.

      Excluir
  12. Opa blz? Estou desenvolvendo um software e ao tentar implantar esta solução de autenticação com acl, porém não está dando certo. O erro está na variável 'actions' que diz não estar definida. Já copiei o codigo do model e controller de Usuário e o de filtro, bem como adicionei na rota o filtro auth e acl.. O erro da variável está quando é jogado para o arquivo de cache as ações que o usuário logado tem acesso. Variável indefinida: actions.

    ResponderExcluir
    Respostas
    1. Olá Rodrigo,

      Terminei de rodar o código do exemplo e não consegui reproduzir o erro. Pelo que eu pude notar o erro ocorre no método 'welcome' correto? Você pode declarar a variável $actions como um array vazio no inicio do método.

      Excluir
  13. Pois é tinha feito esse exemplo em outra oportunidade e deu certo. Declarei esse array vazio e realmente deu certo. Muito Obrigado. Só outra dúvida, no método de ações sei que é salvo as 5 operações que precedem manipulação de uma tabela. Porém como a aplicação entende que por ex: perfil.index, perfil.create, etc. Se trata da tabela de perfis no banco de dados? Por que mapeei aqui na minha aplicação e algumas funcionalidades não estão sendo reconhecidas..

    ResponderExcluir
    Respostas
    1. Olá Rodrigo,

      Este são os nomes das rotas que o próprio framework gera quando vc utilizar o resource. Para saber quais nomes são gerados, você pode acessar a pasta do projeto pelo terminar e executar o comando php artisan routes

      Excluir
  14. Opa muito obrigado aí.. Lembra nesse projeto é criado um campo na tabela de usuário pra saber se ele estar ativo ou não..Partindo do pressuposto q 0 não tá ativo e 1 tá ativo como faria para que na tela de listagem, ou index de usuários mostrasse apenas os usuários que estão ativos?

    ResponderExcluir
    Respostas
    1. Olé Rodrigo,

      Adicione uma condição "where" na query que monta a listagem.

      Abraço

      Excluir
  15. Boa noite Benicio,

    Primeiramente parabéns pelo blog e pelas vídeo aulas, faça mais de laravel por favor rsrs.

    Uma dúvida no acl, estou implementando ele aqui, e após algumas alterações surgiu um 'bug', quando o usuário loga na aplicação é carregado no cache do laravel as actions que ele tem permissão, supondo que ele tenha acesso a veiculos.index, porém se esse usuário logado for lá em usuários e alterar o perfil dele pra outro perfil que não tenha acesso a veiculos.index, e tentar acessar essa rota ele vai conseguir, visto que a action ainda está em cache, como faria para ao alterar um usuário no método edit do controller UsuariosController, dar um 'refresh' no cache que o acl monta no momento do login ?

    ResponderExcluir
    Respostas
    1. Olá Juliano,

      O que poderíamos fazer na alteração do usuário (método update no UsuariosController) é verificar se o perfil que ele selecionou é igual ao perfil atual. Se esse perfil for diferente, poderiamos matar o cache atual e gravar um novo cache seguindo a idéia do vídeo. Ou poderiamos fazer o que a maioria dos sistemas fazem que eu considero mais seguro, fazer o logout e pedir que o usuário faça o login novamente.

      Um abraço

      Excluir
    2. Olá Benicio, obrigado pela resposta, consegui fazer aqui, vou deixar a solução aqui pra caso mais alguém precise.

      Para o usuário não ter que relogar fiz da seguinte forma, após o update no UsuariosController, adicionei a linha de código abaixo para esquecer o cache daquele usuário que está sendo alterado

      $cache = Cache::forget('actions' . $id);

      e no filters.php, no filtro acl, adicionei logo após entrar no filter acl as linhas de codigo abaixo, que são as mesmas welcome do UsuariosController, que verifica se tem o cache e cria o mesmo caso não tenha

      if(!Cache::has('actions' . Auth::user()->id)) {
      foreach (Auth::user()->perfil->acoes as $acao) {
      $actions[] = $acao->metodo;
      }
      Cache::put('actions' . Auth::user()->id, $actions, 120);
      }


      Abraços !

      Excluir
    3. Olá Juliano,

      Muito bom. Valeu aí por compartilhar o seu conhecimento.

      Grande abraço

      Excluir
  16. Opa blz? Sobre o upload de fotos em Laravel, que você implementou no sistema Filmoteca, existe alguma biblioteca no Laravel que permita redimensionar aquela imagem num tamanho para celular. Daí no caso criaria outro campo na tabela para armazenar essa img menor.. Preciso desta funcionalidade pois criarei uma app mobile.. Se puder ajudar ae

    ResponderExcluir
    Respostas
    1. Olá Rodrigo,

      Você pode utilizar a mesma biblioteca que eu utilizei para gerar imagens de tamanhos diferentes. O nome dela é Intervention Image e você ler a documentação no link http://image.intervention.io.
      Lá tem exemplos de como redimensionar, cortar e aplicar efeitos e filtros na imagem.

      Abraço

      Excluir
  17. Opa blz.. Instalei o intervention image no meu projeto, chamei a biblioteca conforme está na documentação dentro do arquivo config/app.php. Porém está dando erro em pegar a propriedade getClientOriginalName() do poster ou foto. Estou me baseando no Controller de Filmes onde teve essa funcionalidade de upload de imagens. Outra duvida que tive é: Onde é definido que a imagem vai ser guardada em public/assets/upload ? Por que lá no controller tem sobre o path. Mas onde que o path está setado para este diretório?

    ResponderExcluir
  18. Olá Rodrigo,

    O getClientOriginalName é do próprio input file do Laravel e não tem ligação com o Intervention Image. Você já tentou printar a variável do input file?

    Isso. Vai ser salva no public/assets/upload. Na linha 12 do arquivo FilmesController, eu passo o caminho.

    Abraço

    ResponderExcluir
  19. Deu certo, o erro estava em faltar especificar o 'files'=true no form de create e edit. DAquele jeito em que está no upload de imagens, pegar somente o nome da imagem e extensão, quando for criado um web service e consumido numa app, ele vai retornar a imagem? To com uma duvida nisso, pois estarei desenvolvendo a app mobile a partir dos dados da web, o web service já está até criado.

    ResponderExcluir
    Respostas
    1. Olá Rodrigo,

      Além do nome e da extensão, você vai precisar passar o caminho onde a imagem está.

      Abraço

      Excluir
  20. Opa blz? Cara estou tendo dificuldades para hospedar uma app laravel 4 no servidor compartilhado hostinger. Já fiz configuração do banco de dados, do .htacess e outras, porém estou com o seguinte erro:

    There was an error with your request.500

    Se ja tiver tido uma experiência compartilhado para hospedar app laravel 4 ou qualquer outro servidor fala aí ..

    ResponderExcluir
    Respostas
    1. Olá Rodrigo,

      Cara eu não conheço em hosting. Já hospedei algumas aplicações na KingHost utilizando .htacess. No link http://www.codegeo.com.br/2013/03/utilizando-htaccess-para-hospedar-uma.html, eu mostro qual o procedimento.

      Abraço

      Excluir
  21. Hospedando minha aplicação laravel encontrei alguns erros. Como por exemplo num arquivo em que carrega um arquivo de mensagem json. Na url pega o public_path(). '/message.json'. Em ambiente local roda tranquilo, porém em ambiente de producao no servidor ele não reconhece dai tenho q alterar isso linha a linha sempre que acontecer. Teria uma forma de setar o public_path() com um endereço remoto, que não fosse local?

    ResponderExcluir
    Respostas
    1. Olá Rodrigo,

      Nunca vi esse problema ocorrer. O public_path é um helper do Laravel que faz referência a pasta public. Se for o caso você pode criar seu próprio helper ou somente fazer a alteração no arquivo util.php que contém o método message. Dessa forma você faz a alteração em um único lugar.

      Abraço

      Excluir
  22. Consegui hospedar a app no hostinger. Me tire uma duvidas em relação a upload de imagens. Tenho 2 campos numa tabela, devem armazenar a mesma image porém uma redimensionada para 120x 120 e outra 300x300. A parte do controller tudo bem, mas por se tratarem de dois registros diferentes numa tabela, como fazer para indexar o mesmo campo file na view para os 2? tem como? Hoje tá so assim no meu Form::file('poster') o nome do outro registro e posterGrande. Teria como fazer isso utilizando apenas um campo de up para os dois registros ou só criando um pra cada registro mesmo?

    ResponderExcluir
    Respostas
    1. Olá Rodrigo,

      Na minha visão, seria necessário somente um campo no banco de dados onde eu guardaria o nome gerado para o arquivo. E geraria as imagens (utilizando o Intervention Image) com os tamanhos 120 e 300 e concatenaria no nome do arquivo.

      Dessa forma na hora de exibir a imagem bastaria chamar $poster . '_120.png' ou $poster . '300.png'

      Essa é somente uma das idéias de como fazer o que você está pensando.

      Abraço

      Excluir
    2. Pois é, só que tenho a necessidade de ter também um campo na tabela que anexe a img grande. Pois estou criando app em jQuery Mobile, daí em momento de listagem dos dados peegaria a img de 120, e em detalhamento dos dados, pegaria a img de 300. Isso pode ser feito com um único componente File? Por que as imagens serão cadastradas inicialmente as mesmas, a unica diferença é que em em dimensões e em campos de registros diferentes na tabela, foi isso que fiquei um pouco confuso. Mas se não tiver como, ou se tiver e for meio complicado, sem problemas eu faço criando outro campo mesmo..

      Excluir
    3. Olá Rodrigo,

      A idéia é utilizar somente um input file e uma coluna no banco de dados. Nessa coluna, eu vou guardar somente o nome gerado da imagem sem a dimensão.

      Agora eu iria utilizar esse nome para gerar as duas imagens com as respectivas dimensões.

      Supondo que foi feito o upload da imagem que gerou o nome fictício 'a2b3rt'. Com o Intervention Image, será gerado dois arquivos a2b3rt_120.png e a2b3rt_300.png. Note que o que foi salvo no banco de dados foi somente a2b3rt que será o valor atribuído a uma variável. Dessa forma você pode chamar as duas imagens com um único registro no banco de dados ($poster . '_120.png' ou $poster . '_300.png');

      Abraço

      Excluir
  23. Excelente...
    Obrigado de Portugal
    Abração....

    ResponderExcluir
    Respostas
    1. Olá amigo,

      Eu que agradeço por acompanhar nosso blog.

      Grande abraço

      Excluir
  24. Achei muito útil e bem fácil de implementar sua ACL, gostaria de saber como fazer para dar "forget" no cache após a sessão do usuário expirar. Obrigado!

    ResponderExcluir
    Respostas
    1. Olá Carlos,

      Você pode verificar se a sessão ainda está ativa com Auth::check(). Caso ela tenha expirado, basta chamar Cache::forget('actions' . Auth::user()->id) e Session::flush()

      Abraço

      Excluir
  25. Olá Benicio,

    Obrigado pela atenção, estarei vendo, parabéns novamente pelo tutorial.

    ResponderExcluir
  26. Olá Benicio, boa tarde! Sou eu novamente!
    QUando tento adcionar uma rota que não pertence ao resource (index, show, create e etc.) tipo a rota, veiculos.search ele não reconhece nas permissões, mesmo cadastrado para o perfil, só consigo acessála como aadmin. Sabe o que poderia ser?

    ResponderExcluir
    Respostas
    1. Olá Carlos,

      Você deu uma alias para essa rota? Para rotas "manuais" é necessário incluir um alias. Ex:
      Route::get('veiculo/search', array('uses' => 'VeiculosController@search', 'as' => 'veiculo.search'));

      Lembrando que deve-se adicionar os novos alias no banco de dados.

      Abraço

      Excluir
    2. Opa! Não conhecia essa opção. Funcionou certinho. Obrigado mais uma vez.

      Excluir
  27. Boa noite, tem com eu seguir a ideia e implantar isso no laravel 5.1? Você tem algum tutorial que explique isso no 5.1? Grato

    ResponderExcluir
    Respostas
    1. Bom dia Rodrigo,

      Infelizmente ainda não refiz o tutorial com Laravel 5.1. Em breve devo lançar um novo tutorial falando do Laravel 5.1

      Abraço

      Excluir
    2. Boa noite, mas eu seguindo esse tutorial no 4 eu consigo pegar a ideia dele e implantar no 5.1?

      Excluir
    3. Boa tarde Rodrigo,

      Com a idéia principal sim. A diferença é que no Laravel 5.1 você vai precisar construir um Middleware para fazer o ACL. Recomendo você dar uma lida no link http://laravel.com/docs/5.1/middleware

      Excluir
    4. Boa tarde, obrigado, com sua dica consegui encontrar um tutorial em ingles, e consegui fazer o acl, agora so to finalizando a parte dinamica, mas os teste que fiz funcionou. Se permitir depois posso colocar o link de onde eu tirei o tutorial.Grato

      Excluir
    5. Boa tarde Rodrigo,

      Fique a vontade, pode compartilhar sem problemas.

      Um abraço

      Excluir
  28. Olá Benicio, tenho um sistema ainda em Laravel 4.2 no qual uso seu modelo de ACL, porém, agora está havendo um problema de sessions, quando clico em um link, automaticamente ele muda para outro usuário que está logado, pegando a session de outro usuário. Faz alguma ideia do que pode estar ocorrendo?

    ResponderExcluir
    Respostas
    1. Olá Carlos,

      Teve alguma alteração no código ou alguma atualização? Não era pra estar ocorrendo isso já que o arquivo que contém as sessões é criado individualmente para cada usuário conforme o vídeo.

      Abraço

      Excluir
  29. Obrigado pela atenção Benicio, não houve alteração, mas pelo que averiguei aqui só ocorre na rede específica da empresa, parece mais algo ligado ao firewall ou servidor de internet. Quando passo para uma rede diferente o erro não ocorre. Valeu!

    ResponderExcluir
    Respostas
    1. Olá Carlos,
      Quem gerencia essa sessão é o servidor de aplicação mesmo. Seria bom verificar com o pessoal da infra se eles fazem algum tipo de manipulação.
      Abraço

      Excluir