Formlar'daki Kimlik Bilgilerini Kaydet

Meggin Kearney
Meggin Kearney

Oturum açma formlarındaki kimlik bilgilerini kaydedin

Kayıt ve oturum açma formlarınızı mümkün olduğunca basit tutun.

Kullanıcıların geri döndüklerinde tekrar oturum açmak zorunda kalmamaları için oturum açma formlarındaki kimlik bilgilerini kaydedin.

Formlardaki kullanıcı kimlik bilgilerini depolamak için:

  1. Forma autocomplete ekleyin.
  2. Formun gönderilmesini engelleyin.
  3. İstek göndererek kimliğinizi doğrulayın.
  4. Kimlik bilgisini saklayın.
  5. Kullanıcı arayüzünü güncelleyin veya kişiselleştirilmiş sayfaya gidin.

autocomplete alanını forma dahil edin

Devam etmeden önce formunuzun autocomplete özellikleri içerip içermediğini kontrol edin. Bu, Credential Management API'nin formdan id ve password öğelerini bulmasına ve bir kimlik bilgisi nesnesi oluşturmasına yardımcı olur.

Bu, Credential Management API'yi desteklemeyen tarayıcıların bu API'nin anlamını anlamasına da yardımcı olur. Otomatik doldurma hakkında daha fazla bilgiyi Jason Grigsby'nin bu makalesinde bulabilirsiniz.

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

Formun gönderilmesini engelleme

Kullanıcı gönder düğmesine bastığında formun gönderilmesini engelleyin. Aksi halde sayfa geçişine neden olur:

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

Sayfa geçişini engelleyerek, orijinalliğini doğrularken kimlik bilgisi bilgilerini saklayabilirsiniz.

İstek göndererek kimlik doğrulama

Kullanıcının kimliğini doğrulamak için AJAX kullanarak sunucunuza kimlik bilgisi bilgilerini iletin.

Sunucu tarafında, kaydolma/oturum açma/şifre değiştirme işleminin başarılı olup olmadığını tarayıcı açısından netleştirmek için HTTP kodu 200 veya 401 ile yanıt veren bir uç nokta oluşturun (veya mevcut bir uç noktayı değiştirin).

Örneğin:

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

Kimlik bilgisini sakla

Kimlik bilgisini depolamak için önce API'nin kullanılabilir olup olmadığını kontrol edin, ardından form öğesini eşzamanlı veya eşzamansız olarak bağımsız değişken olarak içeren bir PasswordCredential oluşturun. navigator.credentials.store() numaralı telefonu arayın. API kullanılamıyorsa profil bilgilerini bir sonraki adıma yönlendirebilirsiniz.

Eşzamanlı örnek:

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

Eşzamansız örnek:

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

İstek başarılı olduğunda kimlik bilgisi bilgilerini saklayın. (İstek başarısız olursa geri gelen kullanıcıların kafasını karıştıracağından kimlik bilgisi bilgilerini saklamayın.)

Chrome tarayıcı kimlik bilgisi bilgilerini aldığında kimlik bilgilerinin (veya federasyon sağlayıcısının) depolanmasını isteyen bir bildirim açılır.

mağaza kimlik bilgisi
Otomatik olarak oturum açan kullanıcı için bildirim

Kullanıcı arayüzünü güncelleme

Her şey yolunda giderse profil bilgilerini kullanarak kullanıcı arayüzünü güncelleyin veya kişiselleştirilmiş sayfaya ilerleyin.

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

Tam kod örneği

// 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');
    });
});

Tarayıcı uyumluluğu

PasswordCredential

Tarayıcı Desteği

  • 51
  • 79
  • x
  • x

Kaynak

Tarayıcı Desteği

  • 51
  • 79
  • 60
  • 13

Kaynak

Geri bildirim