Aula 80 – Loja Online – Atualização Ajax CSRF Token

Aula 80 – Loja Online – Atualização Ajax CSRF Token

Loja Online - Django

Loja Online – Django

Pacote Programador Fullstack

Pacote Programador Fullstack

Voltar para página principal do blog

Todas as aulas desse curso

Aula 79                       Aula 81

Redes Sociais:

facebook

Meus links de afiliados:

Hostinger

Digital Ocean

One.com

Melhore seu NETWORKING

https://digitalinnovation.one/

Participe de comunidades de desenvolvedores:

Fiquem a vontade para me adicionar ao linkedin.

E também para me seguir no https://github.com/toticavalcanti.

Código final da aula:

https://github.com/toticavalcanti

Quer aprender python3 de graça e com certificado? Acesse então:

https://workover.com.br/python-codigo-fluente

Canais do YoutubeRemover imagem destacada

Toti

Backing Track / Play-Along

Código Fluente

Putz!

Vocal Techniques and Exercises

PIX para doações

PIX Nubank

PIX Nubank


Aula 80 – Loja Online – Atualização Ajax CSRF Token

Antes de proseguir o projeto, personalizando o User Model Default Django, vamos fazer uma atualização no código que criamos na Aula 78 – Loja Online – Segurança e Organização dos Javascripts.

Iremos refatorar e fazer uma atualização no código do csrf.ajax.js para a nova forma como o Django utiliza para anexar o CSRF token ao cabeçalho da request.

Antes

Anteriormente, o desenvolvedor precisava extrair manualmente o token do cookie e anexá-lo ao cabeçalho da solicitação AJAX, como fizemos anteriormente, ficando mais verboso, ou seja, maior e mais propenso a erros.

Agora

A nova forma de fazer isso é utilizando a função fetch().

A função fetch() é uma API do JavaScript moderna e padronizada que permite fazer solicitações de rede.

Ela é compatível com a maioria dos navegadores modernos e é muito fácil de usar.

Para anexar o CSRF token ao cabeçalho da solicitação AJAX, basta modificar o código o csrf.ajax.js ficando da seguinte forma:

Obs. A parte em vermelho comentada, é o código antigo, a parte em azul, é como o código vai ficar, se quiser deletar a parte em vermelho, pode deletar sem problema.

django_ecommerce/e_commerce/static_local/js/csrf.ajax.js


// This is the old way to do form ajax csrf token in django
// $(document).ready(function(){
//     // using jQuery
//     function getCookie(name) {
//       let cookieValue = null;
//       if (document.cookie && document.cookie !== '') {
//         const cookies = document.cookie.split(';');
//         for (let i = 0; i < cookies.length; i++) {
//           const cookie = jQuery.trim(cookies[i]);
//           // Does this cookie string begin with the name we want?
//           if (cookie.substring(0, name.length + 1) === (name + '=')) {
//             cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
//             break;
//           }
//         }
//       }
//       return cookieValue;
//     }
//     const csrftoken = getCookie('csrftoken');
  
//     function csrfSafeMethod(method) {
//       // these HTTP methods do not require CSRF protection
//       return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
//     }
//     $.ajaxSetup({
//       beforeSend: function(xhr, settings) {
        
//         if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
//            console.log("Settings Type: " + settings.type)
//            console.log("CSRF TOKEN: " + csrftoken)
//            console.log("XHR: " + xhr.global)
//            xhr.setRequestHeader("X-CSRFToken", csrftoken);
//         }
//       }
//     });
//   })


// This is the new way to do form ajax csrf token in django - Using Fetch API
$(document).ready(function(){
  function getCookie(name) {
    let cookieValue = null;
    if (document.cookie && document.cookie !== '') {
      const cookies = document.cookie.split(';');
      for (let i = 0; i < cookies.length; i++) {
        const cookie = cookies[i].trim();
        if (cookie.substring(0, name.length + 1) === (name + '=')) {
          cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
          break;
        }
      }
    }
    return cookieValue;
  }

  const csrftoken = getCookie('csrftoken');
  console.log("CSRF Token:", csrftoken);

  function sendData(url, data, method='POST') {
    console.log("URL:", url);

    return fetch(url, {
      method: method,
      headers: {
        'X-CSRFToken': csrftoken,
        'Accept': 'application/json',
        'Content-Type': 'application/json'
      },
      credentials: 'same-origin',
      body: JSON.stringify(data)
    });
  }
  const url = window.location.pathname;
  sendData(url)
});

Observe que a função getCookie() continua sendo utilizada para obter o valor do cookie ‘csrftoken‘, que é então passado como o valor do cabeçalho ‘X-CSRFToken’ na solicitação fetch().

Com essa atualização no código do csrf.ajax.js, o processo de anexar o CSRF token ao cabeçalho da request ficou mais fácil e menos propenso a erros.

Veja nesses links da documentação oficial, como era na versão 1.8 do Django, e como é atualmente que ele lida com tokens CSFR em solicitações javascript na versão 4.1.

Como era:

https://docs.djangoproject.com/en/1.8/ref/csrf/

Como é agora:

https://docs.djangoproject.com/en/4.1/howto/csrf/

É isso, até a próxima. 😉

Voltar para página principal do blog

Todas as aulas desse curso

Aula 79                       Aula 81

Código final da aula:

https://github.com/toticavalcanti

Canais do Youtube

Toti

Backing Track / Play-Along

Código Fluente

Putz!

Vocal Techniques and Exercises

Dêem um joinha 👍 na página do Código Fluente no
Facebook.

Sigam o Código Fluente no Instagram e no TikTok.

Código Fluente no Pinterest.

Meus links de afiliados:

Hostinger

Digital Ocean

One.com

Nos vemos na próxima então, \o/  😉 Bons Estudos!

About The Author
-

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>