Puncte:0

Trimiterea formularului de înregistrare dinamic folosind vanilla Javascript ajax

drapel us

Vreau să folosesc capacitatea ajax de a nu reîmprospăta pagina sau de a redirecționa utilizatorul către pagina de înregistrare. Au fost create modale de dialog Autentificare/Înregistrare. Am ajax-ul javascript de conectare care funcționează perfect folosind un apel ajax la API-ul de conectare fără configurații sau module adăugate. Doresc să integrez formularul de înregistrare în același mod. As dori ca inregistrarea sa:

  1. arată într-un mod - aceasta funcționează.
  2. Trimiteți codul javascript funcționează cu preventDefault
  3. răspunsul eșuează.

Ajax Post returnează „<” în mod evident, acesta returnează niște html. Cum știu cum să transmit datele în apelul ajax și la ce să mă aștept ca răspuns? Exemplul meu de mai jos:

<style>
.scroll {
  //background-color: #fed9ff;
  //width: 600px;
  height: 500px;
  overflow-x: hidden;
  overflow-y: auto;
  //text-align: center;
  //padding: 20px;
}


.close { 
  margin: 10px 25px 0px;
}
#log-title { 
  margin-left:25px;
}
</style>

<a data-target="#register-modal" data-toggle="modal" class="" id="" href="#register-modal">Register / Create an Account </a>
 
<div id="overlay_container"></div>

 
<!--  Register to download button so stays on same page.  -->
<div id="register-modal" class="modal" tabindex="-1" role="dialog" aria-hidden="true">
  <button type="button" class="close" data-dismiss="modal" aria-label="Close">
    <span aria-hidden="true">&times;</span>
  </button> 
  <h3 id="log-title">Please register:</h3>   
  <div class="modal-dialog">
    <div class="modal-content scroll">
      <?php
        $register_form = \Drupal::service('entity.form_builder')->getForm(\Drupal\user\Entity\User::create([]), 'register', []);    
        // Load the service renderer
        $render = Drupal::service('renderer');
        $rform = $render->renderPlain($register_form);
        echo $rform;
      ?>
    </div> <!-- Register modal content end-->
  </div><!-- Register modal-dialog end -->
</div><!-- Register modal end -->

<script>
  var registerForm = document.getElementById('user-register-form');
  if (registerForm ) {
    // capture registration submit, prevent from submission and use ajax to get response
    registerForm.onsubmit = async (e) => {
      e.preventDefault();
        // callRegCaptcha();
      elms =document.getElementById("user-register-form").elements; 
      var url = "https://website/user/register"; //website is a true url

      fetch(url, {
        method: 'POST',
        body: elms
      })
      .then(response=>response.json())
      .then(json => {
        console.log(json);
      });
    }
  }
</script>

Totul funcționează, cu excepția răspunsului. Nu găsesc nicăieri la ce să mă aștept ca răspuns. Sau dacă leagă corect datele ulmilor. Ma poate ajuta cineva in acest domeniu?

Conectarea a necesitat un csrfToken pentru a fi transmis împreună cu

 antete: {
                „Content-Type”: „application/json”,
                „X-CSRF-Token”: csrfToken
              },

și „?_format=json” atașat la adresa URL, dar pentru valorile de înregistrare rulez orbește. Are cineva informatii despre ce sa treaca? Răspunsul pe care îl primesc este pagina html.

În cele din urmă, înregistrarea are un captcha v2 care afișează eroarea: „Răspunsul pe care l-ați introdus pentru CAPTCHA nu a fost corect”

M-am uitat si pe aceasta pagina: https://www.drupal.org/node/2405657

Arătând #Inregistreaza-te

POST: https://example.com/user/register?_format=json
Tip de conținut: aplicație/json

{
  "nume": { "valoare": "fooBar" },
  "mail": { "value": "[email protected]" },
  "trece": { "valoare": "secretSauce" }
}
200 OK

Nu primesc un răspuns json, returnează eroarea de sintaxă: token neașteptat < în JSON la poziția 1.

prelua(url, {
            metoda: 'POST',
            date: JSON.stringify({
  "nume": { "valoare": "fooBar" },
  "mail": { "value": "[email protected]" },
  "trece": { "valoare": "secretSauce" }
}),


            dataType: „json”,
            contentType: „application/json; charset=utf-8”,
            succes: function(data) {
                console.log(date);
                successmessage = 'Datele au fost capturate cu succes';
                $("#overlay_container").text(successmessage);
            },
            eroare: function(data) {
                console.log(date);
                successmessage = 'Eroare';
                $("#overlay_container").text(successmessage);
            }
        })
        .then(response=>response.json())
        .then(json => {
            console.log(json);
        }).catch(function(err) {
                        console.log(err); // arată excepția de mai sus
                 });

Niciunul dintre succesul: sau eroarea nu răspunde, doar prinderea

Mai mult, atunci când _format=json la adresa URL, este raportată următoarea eroare:

{mesaj: „Format inacceptabil: json”}
mesaj: „Format inacceptabil: json”
[[Prototip]]: obiect

Apoi, am încercat să urmăresc răspunsul la această postare de la @Fons Vandamme despre instalarea Rest UI și configurarea înregistrării utilizatorului

înregistrarea utilizatorului cu rest

mesaj: „Nu s-au primit date privind contul de utilizator pentru înregistrare.”
[[Prototip]]: obiect

În continuare: sub admin extinde, a schimbat autentificarea de la cookie-uri la autentificare de bază prin instalarea autentificarea de bază HTTP, navigând la restul configurației UI pentru Înregistrarea utilizatorului /utilizator/registrare: POST și noua eroare este o cerere 400 Bad Request.

Puncte:1
drapel us

Pentru ca acest lucru să funcționeze, aceștia au fost pașii luați pentru ca acesta să funcționeze. Conform multor comentarii, urmați instrucțiunile de pe aceste link-uri: https://areatype.com/blog/register-user-drupal-8-rest-api

  1. Activați RESTful Web Services, HAL, REST UI, Serializare
  2. Configurați Rest UI faceți clic pe „configure” sub Extindeți Rest UI. Activați resursa „Înregistrare utilizator” cu următoarele setări:

       A. cale -> /user/register: POST  
       b. metode: POST
       c. formate: hal_json, json
       d. autentificare: cookie „**NOTĂ**: acest lucru poate evită acreditările pentru noii utilizatori...”
  1. Setări cont: Sub Configurare -> Setări cont „Cine poate înregistra conturi?” -> vizitator dezactivați „Solicită verificarea e-mailului când un vizitator creează un cont”

  2. Servicii web RESTful -> Extindere -> Servicii web RESTful -> permisiuni Caseta de selectare „Accesați POST pe resursa de înregistrare a utilizatorului” Acordați utilizator anonim.

  3. Obțineți Postman pentru Chrome și configurați-l ca atare: POST -> punct final URL -> http://{website-name-pointer}/user/register?_format=hal_json Autorizare: niciuna Anteturi: Content-Type:application/json x-csrf-token:OGVi9xj9vemD3BItXOWf4-3ml2maqy-2kk0gkjIRuHk **Obțineți simbolul x-csrf-token prin intermediul noului constructor, primiți apel ** ** http://{site-ul web}/session/token ** scoate un token csrf în corpul returnat.

ar trebui sa arate asa:

antet: X-CSRF-Token și Content-Type
adresa URL a postării: http://{website-name-pointer}/user/register?_format=hal_json
corp:
{
"nume":[{"valoare":"test3"}],
"mail":[{"value":"[email protected]"}],
"trece":[{"value":"test"}]
}

Acest lucru ar trebui să returneze o stare de 200 ok împreună CU conținutul uid uuid etc utilizatorii nou înregistrați. ca răspuns la fel cum ar fi dacă pagina de înregistrare ar fi trimisă.

NOTĂ dacă returnează pagina html „create/register user” în corpul răspunsului, sau alte valori, este cel mai probabil setările din restul configurației ui sau configurația vistor.

Dacă primiți un alt statut mai puțin identificabil, totul este incorect. Dacă primiți eroarea 500, probabil că este problema de autentificare și treceți de la modul cookie la autorizarea de bază sau verificați din nou setările UI pentru autentificatori. Numărul 2 și 3 păreau să fie zona de încercare și eroare.

Se pare că depanarea este mai dificilă decât ar trebui să fie și a fost nevoie de 3 zile de căutare pe internet pentru răspunsuri și de citit o mulțime din jurnalul de modificare a codului.

Am pus acest lucru acolo pentru a ajuta pe oricine cu dificultăți similare ca procesul să funcționeze eficient.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.