Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Luiz Gustavo Costa Ceolin

Agendamento de Tarefas Laravel 5.2

Recommended Posts

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();

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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..

Compartilhar este post


Link para o post
Compartilhar em outros sites

No seu sistema, não rola controlar a sessão no banco de dados?

Tendo isso no banco, ficaria bem mais fácil.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites
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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.
       
      Por favor, me permita tirar uma dúvida com os amigos.

      Tenho um Formulário onde o Usuário digita todos os Dados necessários.

      Minha dúvida:
      --> como faço após o usuário digitar os dados e salvar, o Sistema chamar uma Modal ou mensagem perguntando se deseja imprimir agora ?

      Grato,
       
      Cesar
    • Por Carcleo
      Tenho uma abela de usuarios e uma tabela de administradores e clientes.
      Gostaria de uma ajuda para implementar um cadastro
       
      users -> name, login, passord (pronta) admins -> user_id, registratiom, etc.. client -> user_id, registratiom, etc...
      Queria ajuda para extender de user as classes Admin e Client
      Olhem como estáAdmin
      <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Admin extends User {     use HasFactory;            protected $fillable = [         'name',         'email',         'password',         'registration'     ];      private string $registration;     public function create(         string $name,          string $email,          string $password,         string $registration     )     {         //parent::create(['name'=>$name, 'email'=>$email, 'password'=>$password]);         parent::$name = $name;         parent::$email = $email;         parent::$password = $password;         $this->registration = $registration;     } } User
      <?php namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class User extends Authenticatable {     /** @use HasFactory<\Database\Factories\UserFactory> */     use HasFactory, Notifiable;     static string $name;     static string $email;     static string $password;     /**      * The attributes that are mass assignable.      *      * @var list<string>      */     protected $fillable = [         'name',         'email',         'password',     ];          /**      * The attributes that should be hidden for serialization.      *      * @var list<string>      */     protected $hidden = [         'remember_token',     ];     /**      * Get the attributes that should be cast.      *      * @return array<string, string>      */     protected function casts(): array     {         return [             'email_verified_at' => 'datetime',             'password' => 'hashed',         ];     }          public function roles() : BelongsToMany {         return $this->belongsToMany(Role::class);     }       public function hasHole(Array $roleName): bool     {                 foreach ($this->roles as $role) {             if ($role->name === $roleName) {                 return true;             }         }         return false;     }         public function hasHoles(Array $rolesName): bool     {                 foreach ($this->roles as $role) {             foreach ($rolesName as $rolee) {             if ($role->name === $rolee) {                 return true;             }          }         }         return false;     }         public function hasAbility(string $ability): bool     {         foreach ($this->roles as $role) {             if ($role->abilities->contains('name', $ability)) {                 return true;             }         }         return false;     }     } Como gravar um Admin na tabela admins sendo que ele é um User por extensão?
      Tentei assim mas é claro que está errado...
      public function store(Request $request, Admin $adminModel) {         $dados = $request->validate([             "name" => "required",             "email" => "required|email",             "password" => "required",             "registration" => "required"         ]);         $dados["password"] =  Hash::make($dados["password"]);                  $admin = Admin::where("registration",  $dados["registration"])->first();                  if ($admin)              return                    redirect()->route("admin.new")                             ->withErrors([                                 'fail' => 'Administrador já cadastrados<br>, favor verificar!'                   ]);                            $newAdmin = $adminModel->create(                                    $dados['name'],                                    $dados['email'],                                    $dados['password'],                                    $dados['registration']                                 );         dd($newAdmin);         $adminModel->save();         //$adminModel::create($admin);                  return redirect()->route("admin.new")->with("success",'Cadastrado com sucesso');     }  
    • Por violin101
      Caros amigos, saudações.
       
      Gostaria de tirar uma dúvida com os amigos, referente a PDV.
       
      Estou escrevendo um Sistema com Ponto de Vendas, a minha dúvida é o seguinte, referente ao procedimento mais correto.

      Conforme o caixa vai efetuando a venda, o Sistema de PDV já realiza:
      a baixa direto dos produtos no estoque
      ou
      somente após concretizar a venda o sistema baixa os produtos do estoque ?
       
      Grato,
       
      Cesar
       
    • Por violin101
      Caros amigos do grupo, saudações e um feliz 2025.
       
      Estou com uma pequena dúvida referente a Teclas de Atalho.

      Quando o Caps Lock está ativado o Comando da Tecla de Atalho não funciona.
      ou seja:
      se estiver para letra minúscula ====> funciona
      se estiver para letra maiúscula ====> não funciona
       
      Como consigo evitar essa falha, tanto para Letra Maiúscula quanto Minúscula ?

      o Código está assim:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'r' ) return;// Não é Ctrl+r, portanto interrompemos o script evt.preventDefault(); });  
      Grato,
       
      Cesar
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.