Enregistrer des identifiants depuis Forms

Meggin Kearney
Meggin Kearney

Enregistrer les identifiants des formulaires de connexion

Simplifiez au maximum vos formulaires d'inscription et de connexion.

Enregistrez les identifiants à partir des formulaires de connexion afin que les utilisateurs n'aient pas à se reconnecter lorsqu'ils reviennent.

Pour stocker les identifiants utilisateur à partir de formulaires:

  1. Incluez autocomplete dans le formulaire.
  2. Empêchez l'envoi du formulaire.
  3. Authentifiez-vous en envoyant une requête.
  4. Stockez l'identifiant.
  5. Mettez à jour l'UI ou accédez à la page personnalisée.

Inclure autocomplete dans le formulaire

Avant de continuer, vérifiez si votre formulaire comprend des attributs autocomplete. Cela permet à l'API Credential Management de trouver les informations id et password à partir du formulaire, et de créer un objet d'identification.

Cela permet également aux navigateurs non compatibles de l'API Credential Management de comprendre sa sémantique. Pour en savoir plus sur la saisie automatique, consultez cet article de Jason Grigsby.

<form id="signup" method="post">
  <input name="email" type="text" autocomplete="username email" />
  <input name="display-name" type="text" autocomplete="name" />
  <input name="password" type="password" autocomplete="new-password" />
  <input type="submit" value="Sign Up!" />
</form>

Empêcher l'envoi du formulaire

Lorsque l'utilisateur appuie sur le bouton d'envoi, empêchez l'envoi du formulaire, ce qui entraînerait une transition de la page:

    var f = document.querySelector('#signup');
    f.addEventListener('submit', e => {
      e.preventDefault();

En empêchant une transition de page, vous pouvez conserver les informations d'identification tout en vérifiant leur authenticité.

S'authentifier en envoyant une requête

Pour authentifier l'utilisateur, transmettez les informations d'identification à votre serveur à l'aide d'AJAX.

Côté serveur, créez un point de terminaison (ou modifiez simplement un point de terminaison existant) qui répond par le code HTTP 200 ou 401, afin que le navigateur sache clairement si le mot de passe d'inscription/de connexion/modification a réussi ou non.

Exemple :

// Try sign-in with AJAX
fetch('/signin', {
  method: 'POST',
  body: new FormData(e.target),
  credentials: 'include',
});

Stocker l'identifiant

Pour stocker des identifiants, vérifiez d'abord si l'API est disponible, puis instanciez un objet PasswordCredential avec l'élément de formulaire en tant qu'argument de manière synchrone ou asynchrone. Appelez navigator.credentials.store(). Si l'API n'est pas disponible, il vous suffit de transférer les informations de profil à l'étape suivante.

Exemple de requête synchrone:

if (window.PasswordCredential) {
  var c = new PasswordCredential(e.target);
  return navigator.credentials.store(c);
} else {
  return Promise.resolve(profile);
}

Exemple asynchrone:

if (window.PasswordCredential) {
  var c = await navigator.credentials.create({password: e.target});
  return navigator.credentials.store(c);
} else {
  return Promise.resolve(profile);
}

Une fois que la requête aboutit, stockez les informations d'identification. (Ne stockez pas les identifiants si la requête a échoué, car cela pourrait perturber les utilisateurs connus.)

Lorsque le navigateur Chrome obtient des informations d'identification, une notification s'affiche pour vous demander de stocker un identifiant (ou un fournisseur de fédération).

stocker les identifiants
Notification pour un utilisateur connecté automatiquement

Mettre à jour l'UI

Si tout s'est déroulé comme prévu, mettez à jour l'UI à l'aide des informations de profil ou accédez à la page personnalisée.

     }).then(profile => {
       if (profile) {
         updateUI(profile);
       }
     }).catch(error => {
       showError('Sign-in Failed');
     });
    });

Exemple de code complet

// Get form's DOM object
var f = document.querySelector('#signup');
f.addEventListener('submit', (e) => {
  // Stop submitting form by itself
  e.preventDefault();

  // Try sign-in with AJAX
  fetch('/signin', {
    method: 'POST',
    body: new FormData(e.target),
    credentials: 'include',
  })
    .then((res) => {
      if (res.status == 200) {
        return Promise.resolve();
      } else {
        return Promise.reject('Sign-in failed');
      }
    })
    .then((profile) => {
      // Instantiate PasswordCredential with the form
      if (window.PasswordCredential) {
        var c = new PasswordCredential(e.target);
        return navigator.credentials.store(c);
      } else {
        return Promise.resolve(profile);
      }
    })
    .then((profile) => {
      // Successful sign-in
      if (profile) {
        updateUI(profile);
      }
    })
    .catch((error) => {
      // Sign-in failed
      showError('Sign-in Failed');
    });
});

Compatibilité du navigateur

PasswordCredential

Navigateurs pris en charge

  • 51
  • 79
  • x
  • x

Source

Navigateurs pris en charge

  • 51
  • 79
  • 60
  • 13

Source

Commentaires