Oturum Açma Kullanıcılar

Meggin Kearney
Meggin Kearney

Kullanıcıların oturumunu açmak için tarayıcının şifre yöneticisinden kimlik bilgilerini alın ve kullanıcıların otomatik olarak giriş yapmasını sağlamak için bu bilgileri kullanın. Birden fazla hesabı olan kullanıcıların, hesap seçiciyi kullanarak tek bir dokunuşla hesabı seçmelerine olanak tanıyın.

Otomatik Oturum Aç

Otomatik oturum açma, web sitenizin yalnızca üst sayfasında değil, diğer yaprak sayfalarında da herhangi bir yerde gerçekleşebilir. Bu, kullanıcılar bir arama motoru aracılığıyla web sitenizdeki çeşitli sayfalara ulaştığında yararlıdır.

Otomatik oturum açmayı etkinleştirmek için:

  1. Kimlik bilgisi bilgilerini alma.
  2. Kullanıcının kimliğini doğrulayın.
  3. Kullanıcı arayüzünü güncelleyin veya kişiselleştirilmiş sayfaya gidin.

Kimlik bilgisi bilgilerini alma

Tarayıcı Desteği

  • 51
  • 18
  • 60
  • 13

Kaynak

Kimlik bilgisi bilgilerini almak için navigator.credentials.get() yöntemini çağırın. password veya federated değeri vererek, istenecek kimlik bilgilerinin türünü belirtin.

Otomatik oturum açmalarda her zaman mediation: 'silent' kullanın. Böylece kullanıcı:

  • Depolanmış kimlik bilgisi yok.
  • Birden çok kimlik bilgisi depolanıyor.
  • Oturum kapalıysa.

Kimlik bilgisi almadan önce kullanıcının oturum açmış olup olmadığını kontrol etmeyi unutmayın:

if (window.PasswordCredential || window.FederatedCredential) {
  if (!user.isSignedIn()) {
    navigator.credentials.get({
      password: true,
      federated: {
        providers: ['https://accounts.google.com'],
      },
      mediation: 'silent',
    });
    // ...
  }
}

navigator.credentials.get() tarafından döndürülen vaat, bir kimlik bilgisi nesnesi veya null ile çözümlenir. PasswordCredential ve FederatedCredential olup olmadığını belirlemek için nesnenin password veya federated olacak .type özelliğine bakın.

.type değeri federated ise .provider özelliği, kimlik sağlayıcıyı temsil eden bir dizedir.

Kullanıcının kimliğini doğrula

Kimlik bilgisini aldıktan sonra, kimlik bilgisi türüne (password veya federated) bağlı olarak bir kimlik doğrulama akışı çalıştırın:

    }).then(c => {
     if (c) {
       switch (c.type) {
         case 'password':
           return sendRequest(c);
           break;
         case 'federated':
           return gSignIn(c);
           break;
       }
     } else {
       return Promise.resolve();
     }

Vaat çözümlendiğinde, bir kimlik bilgisi nesnesi alıp almadığınızı kontrol edin. Görmüyorsanız otomatik oturum açma gerçekleştirilemiyor demektir. Otomatik oturum açma işlemini sessizce kapatın.

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

Kimlik doğrulama başarılı olursa kullanıcı arayüzünü güncelleyin veya kullanıcıyı kişiselleştirilmiş sayfaya yönlendirin:

    }).then(profile => {
     if (profile) {
       updateUI(profile);
     }

Kimlik doğrulama hata mesajını göstermeyi unutmayın

Kullanıcıların kafasını karıştırmamak için, kimlik bilgisi nesnesini alırken kullanıcılara "Oturum açılıyor" ifadesini içeren mavi bir kısa mesaj görmeleri gerekir:

Kullanıcının oturum açmakta olduğunu gösteren mavi tost.

Önemli bir ipucu: Kimlik bilgisi nesnesi almada başarılı olmanıza rağmen kullanıcının kimliğini doğrulayamazsanız bir hata mesajı göstermeniz gerekir:

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

Tam kod örneği

if (window.PasswordCredential || window.FederatedCredential) {
  if (!user.isSignedIn()) {
    navigator.credentials
      .get({
        password: true,
        federated: {
          providers: ['https://accounts.google.com'],
        },
        mediation: 'silent',
      })
      .then((c) => {
        if (c) {
          switch (c.type) {
            case 'password':
              return sendRequest(c);
              break;
            case 'federated':
              return gSignIn(c);
              break;
          }
        } else {
          return Promise.resolve();
        }
      })
      .then((profile) => {
        if (profile) {
          updateUI(profile);
        }
      })
      .catch((error) => {
        showError('Sign-in Failed');
      });
  }
}

Hesap seçici ile oturum açma

Bir kullanıcı uyumlulaştırma gerektiriyorsa veya birden fazla hesabı varsa, kullanıcının oturum açmasına izin vermek için hesap seçiciyi kullanın ve normal oturum açma formunu atlayın. Örneğin:

Birden fazla hesap gösteren Google hesap seçici.

Hesap seçici aracılığıyla oturum açmaya ilişkin adımlar, otomatik oturum açma işlemindeki adımlarla aynıdır ve kimlik bilgileri almanın bir parçası olarak hesap seçiciyi gösteren ek bir çağrı içerir:

  1. Kimlik bilgisi bilgilerini alın ve hesap seçiciyi gösterir.
  2. Kullanıcının kimliğini doğrulayın.
  3. Kullanıcı arayüzünü güncelleyin veya kişiselleştirilmiş bir sayfaya gidin.

Kimlik bilgisi bilgilerini alma ve hesap seçiciyi göster

Tanımlanmış bir kullanıcı işlemine (örneğin, kullanıcı "Oturum Aç" düğmesine dokunduğunda) yanıt olarak bir hesap seçici gösterin. navigator.credentials.get() numaralı telefonu arayın ve hesap seçiciyi göstermek için mediation: 'optional' veya mediation: 'required' ekleyin.

mediation required olduğunda, kullanıcıya oturum açması için her zaman bir hesap seçici gösterilir. Bu seçenek, birden fazla hesaba sahip kullanıcıların hesaplar arasında kolayca geçiş yapmasına olanak tanır. mediation, optional olduğunda kullanıcıya navigator.credentials.preventSilentAccess() aramasından sonra oturum açması için açıkça bir hesap seçici gösterilir. Bu normalde, kullanıcı oturumunu kapatmayı veya kaydını silmeyi seçtikten sonra otomatik oturum açma işleminin gerçekleşmemesini sağlamak içindir.

mediation: 'optional' öğesinin gösterildiği örnek:

    var signin = document.querySelector('#signin');
    signin.addEventListener('click', e => {
     if (window.PasswordCredential || window.FederatedCredential) {
       navigator.credentials.get({
         password: true,
         federated: {
           providers: [
             'https://accounts.google.com'
           ]
         },
         mediation: 'optional'
       }).then(c => {

Kullanıcı bir hesap seçtiğinde, kimlik bilgisi kimlik bilgisiyle nihai olarak ortaya çıkar. Kullanıcılar hesap seçiciyi iptal ederse veya kayıtlı kimlik bilgileri yoksa söz, null ile sonlandırılır. Bu durumda, oturum açma formu deneyimine geri dönün.

Oturum açma formuna geri dönmeyi unutmayın

Aşağıda belirtilen durumlardan herhangi biri nedeniyle oturum açma formuna geri dönmeniz gerekir:

  • Kimlik bilgisi depolanmaz.
  • Kullanıcı, hesap seçmeden hesap seçiciyi kapattı.
  • API kullanılamıyor.
    }).then(profile => {
        if (profile) {
          updateUI(profile);
        } else {
          location.href = '/signin';
        }
    }).catch(error => {
        location.href = '/signin';
    });

Tam kod örneği

var signin = document.querySelector('#signin');
signin.addEventListener('click', (e) => {
  if (window.PasswordCredential || window.FederatedCredential) {
    navigator.credentials
      .get({
        password: true,
        federated: {
          providers: ['https://accounts.google.com'],
        },
        mediation: 'optional',
      })
      .then((c) => {
        if (c) {
          switch (c.type) {
            case 'password':
              return sendRequest(c);
              break;
            case 'federated':
              return gSignIn(c);
              break;
          }
        } else {
          return Promise.resolve();
        }
      })
      .then((profile) => {
        if (profile) {
          updateUI(profile);
        } else {
          location.href = '/signin';
        }
      })
      .catch((error) => {
        location.href = '/signin';
      });
  }
});

Birleşik Giriş

Birleşik giriş, kullanıcıların tek bir dokunuşla web sitenizin ek giriş bilgilerini hatırlamak zorunda kalmadan oturum açmasına olanak tanır.

Birleşik girişi uygulamak için:

  1. Kullanıcının kimliğini üçüncü taraf kimliğiyle doğrulayın.
  2. Kimlik bilgilerini saklayın.
  3. Kullanıcı arayüzünü güncelleyin veya kişiselleştirilmiş bir sayfaya gidin (otomatik oturum açmada olduğu gibi).

Üçüncü taraf kimliğiyle kullanıcının kimliğini doğrulayın

Kullanıcı, birleşik giriş düğmesine dokunduğunda FederatedCredential ile belirli bir kimlik sağlayıcı kimlik doğrulama akışını çalıştırın.

Tarayıcı Desteği

  • 51
  • 79
  • x
  • x

Kaynak

Örneğin, sağlayıcı Google ise Google ile Oturum Açma JavaScript kitaplığını kullanın:

navigator.credentials
  .get({
    password: true,
    mediation: 'optional',
    federated: {
      providers: ['https://account.google.com'],
    },
  })
  .then(function (cred) {
    if (cred) {
      // Instantiate an auth object
      var auth2 = gapi.auth2.getAuthInstance();

      // Is this user already signed in?
      if (auth2.isSignedIn.get()) {
        var googleUser = auth2.currentUser.get();

        // Same user as in the credential object?
        if (googleUser.getBasicProfile().getEmail() === cred.id) {
          // Continue with the signed-in user.
          return Promise.resolve(googleUser);
        }
      }

      // Otherwise, run a new authentication flow.
      return auth2.signIn({
        login_hint: id || '',
      });
    }
  });

Google ile Oturum Açma, kimlik doğrulama kanıtı olarak bir kimlik jetonu sağlar.

Genel olarak birleşik girişler, OpenID Connect veya OAuth gibi standart protokoller temel alınarak derlenir. Birleştirilmiş hesaplarla nasıl kimlik doğrulama yapacağınızı öğrenmek için ilgili birleşik kimlik sağlayıcıların belgelerine bakın. Popüler örneklerden bazıları şunlardır:

Kimlik bilgilerini depola

Kimlik doğrulama tamamlandıktan sonra kimlik bilgilerini saklayabilirsiniz. Burada saklayacağınız bilgiler, kimlik sağlayıcıdan gelen id ve kimlik sağlayıcıyı temsil eden bir sağlayıcı dizesidir (name ve iconURL isteğe bağlıdır). Kimlik Bilgisi Yönetimi spesifikasyonunda bu bilgiler hakkında daha fazla bilgi edinin.

Birleşik hesap ayrıntılarını depolamak için kullanıcı tanımlayıcısı ve sağlayıcı tanımlayıcısıyla yeni bir FederatedCredential nesnesi örnek oluşturun. Ardından kimlik bilgilerini depolamak için navigator.credentials.store() yöntemini çağırın.

Başarılı federasyondan sonra eşzamanlı veya eşzamansız olarak bir FederatedCredential başlatın:

Eşzamanlı yaklaşım örneği:

// Create credential object synchronously.
var cred = new FederatedCredential({
  id: id, // id in IdP
  provider: 'https://account.google.com', // A string representing IdP
  name: name, // name in IdP
  iconURL: iconUrl, // Profile image url
});

Eşzamansız yaklaşıma örnek:

// Create credential object asynchronously.
var cred = await navigator.credentials.create({
  federated: {
    id: id,
    provider: 'https://accounts.google.com',
    name: name,
    iconURL: iconUrl,
  },
});

Ardından, kimlik bilgisi nesnesini depolayın:

// Store it
navigator.credentials.store(cred).then(function () {
  // continuation
});

Oturumu kapat

Oturumu kapatma düğmesine dokunulduğunda kullanıcılarınızın oturumunu kapatın. Önce oturumu sonlandırın, ardından gelecekteki ziyaretler için otomatik oturum açmayı kapatın. (Oturumlarınızı nasıl sonlandıracağınız tamamen size bağlıdır.)

Gelecekteki ziyaretler için otomatik oturum açmayı kapat

navigator.credentials.preventSilentAccess() numaralı telefonu arayın:

signoutUser();
if (navigator.credentials && navigator.credentials.preventSilentAccess) {
  navigator.credentials.preventSilentAccess();
}

Bu işlem, kullanıcının bir dahaki sefere otomatik oturum açmayı etkinleştirene kadar otomatik oturum açma işleminin gerçekleşmemesini sağlar. Otomatik oturum açmayı devam ettirmek için bir kullanıcı, hesap seçiciden oturum açmak istediği hesabı seçerek bilinçli olarak oturum açmayı tercih edebilir. Bu durumda, kullanıcı açık bir şekilde oturumu kapatana kadar bu kullanıcının oturumu her zaman tekrar açık kalır.

Geri bildirim