Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia. Eu utilizo o agendamento de tarefas do laravel para fazer uma verificação nos formulários avaliados no meu sistema e para fazer BKP do meu DB ao dia.
Estou implementando no sistema as permissões de poder logar só nos dias solicitados e nos horários definidos. Meu problema é a questão do horário, quero que elimine a sessão do usuário logado caso passe do horário permitido, assim eu apliquei a verificação dentro do mesmo agendamento dos formulários, mas não está funcionando a verificação da hora.
Segue meu código
$schedule->call(function(){
$stt = DB::table('resp_identificacao')
->where('status_id','=','1')
->get();
foreach ($stt as $key => $value)
{
if(Carbon::now('America/Sao_Paulo') > $value->data_prev_retorno)
{
DB::update('UPDATE resp_identificacao SET status_id = "3" where id = '.$value->id.'');
}
}
// esta parte é a verificação da hora
$dt = Carbon::now('America/Sao_Paulo');
$hora = $dt->format('H:i:s');
$hora_entrada = $permission->hora_entrada;
$hora_saida = $permission->hora_saida;
if($hora_entrada > $hora || $hora_saida < $hora)
{
echo Session::flush();
}
// fim verificação
})->everyMinute();Deixa eu ver se entendi, você quer deslogar todos os usuários com Session::flush() ?
Outro detalhe, se tem horários programados, porque esta usando minuto a minuto.
Não é mais fácil usar
->between($start, $end);
Para rodar nos horários específicos.Sim, quem passar do horário permitido para estar logado, quero que seja deslogado no momento.
Eu faço a mesma verificação no controller da home do sistema, quando ele loga verifica se ele pode estar logado, se não puder dou um Session::flush(). Só não consigo fazer isso com o Schedule do laravel.
A questão dos minutos, é porque estou testando e assim fica mais tranquilo.
Session::flush() é para apagar todas as sessões do usuário e não de todos os usuários, desta forma se eu tivesse 1000 usuários logados e um novo entrar e efetuar login deslogaria todos e seria um catástrofe para meu sistema.
Agora se você tiver conhecimento de NODE.js, você pode rodar um script.js para efetuar isso.
Ae tu roda um comando no sistema pra deslogar todos.
$schedule->exec('node /home/foo/bar/script.js')->everyMinute();
ou crie uma middleware que faça uma consulta em uma tabela, desta forma você usa a agenda para setar nestes horarios ON ou OFF, se tiver OFF deslogue todo mundo.
Bem mais simples.Bom amigo, pelos testes que fiz, o Session::flush() quebra apenas todas as sessões da máquina logada, tanto que nos testes eu loguei em 2 máquinas com o mesmo usuário, quando executei um Session::flush() na maquina 1, a máquina 2 continuou rodando normalmente.
Não tenho conhecimentos em node.js, mas vou tentar utilizar as middleware do laravel. Valeu..
No seu sistema, não rola controlar a sessão no banco de dados?
Tendo isso no banco, ficaria bem mais fácil.
Pegue a data máxima que o usuário pode ficar logado até expirar, converta para timestamp, depois converta a data atual para timestamp também, e se atual > limite, destrói as sessions, na minha cabeça parece simples, estou certo?
>
4 horas atrás, hufersil disse:
No seu sistema, não rola controlar a sessão no banco de dados?
Tendo isso no banco, ficaria bem mais fácil.
A middleware no laravel faria uma unica consulta para cada requisição, caso o usuário tenta-se logar novamente, pode até criar uma views avisando que está em manutenção e seria mais tranquilo.
Com a middleware você pode definir quais rotas estaria dentro do grupo. Agora deslogar já seria uma opção, já que a rota estaria bloqueada.
>
1 hora atrás, Mateus Silva disse:
Pegue a data máxima que o usuário pode ficar logado até expirar, converta para timestamp, depois converta a data atual para timestamp também, e se atual > limite, destrói as sessions, na minha cabeça parece simples, estou certo?
Totalmente!
Alguém?