Oturum Açma Hatırlatıcıları: Kullanıcıyı İşin Ortasında Durdurmamak
Bir kullanıcı yorum yazmaya başlar, ilanı favorilerine ekler ya da sepete ürün atar. Sonra ekranda giriş yapması gerektiğini söyleyen bir uyarı belirir. Bu uyarının nerede çıktığı, o ana kadar girilen veriyi koruyup korumadığı ve girişten sonra kullanıcıyı nereye bıraktığı, giriş formunun kendi tasarımından daha belirleyicidir.
Hatırlatıcı aslında ne yapar
Oturum gerektiren her eylem arka planda tek bir soruya bakar: isteği gönderen tarayıcının geçerli bir oturumu var mı? Cevap hayırsa sunucunun üç seçeneği olur. İsteği sessizce reddeder, kullanıcıyı giriş sayfasına yollar ya da eylemi askıya alıp kullanıcıya bulunduğu yerde girmesini söyler.
İlk ikisi daha az kodla yazılır. Üçüncüsü, kullanıcının o ana kadar yaptığı işi kurtaran tek seçenek, ve hatırlatıcı dediğimiz şey de tam olarak bu. Yönlendirme bağlamı siler; hatırlatıcı bağlamı yerinde tutup üstüne bir katman açar.
Uyarıyı sayfanın girişine değil eylemin olduğu yere koy
Sayfa açılır açılmaz gelen giriş duvarı en ucuz çözümdür, çünkü tek bir kontrolle halledilir. Arama sonucundan bir LinkedIn profiline girdiğinizde karşınıza çıkan ekran bunun tanıdık örneği. İçeriği görmek için gelen kullanıcı, ne olduğunu göremeden geri döner.
Alternatifi, sayfayı açık bırakıp kontrolü eylemin tetiklendiği ana taşımaktır. Kullanıcı yorum kutusuna yazana kadar hiçbir şey sormazsın; gönder düğmesine bastığında kutunun hemen altında giriş alanı açılır. Kontrol aynı kontrol, sadece yeri değişti.
Bu ayrım okuma ile yazma arasından geçer. Okunabilir içeriği kapatmak trafik kaybettirir; veri yazan, bir şeyi kalıcı hale getiren eylemlerde giriş istemek kullanıcıya da mantıklı gelir.
Kullanıcının yarım kalan işi
Hatırlatıcının işe yaraması, girişten sonra kullanıcının kaldığı yerden devam edebilmesine bağlı. Bunun için giriş katmanını açmadan önce şu anki durumu bir yere yazmak gerekir:
- Formdaki metin ve seçili alanlar
- Kullanıcının tetiklediği eylem (hangi ilan, hangi ürün, hangi buton)
- Sayfadaki filtre ve sıralama gibi geçici tercihler
- Yükleme sırasında seçilmiş ama gönderilmemiş dosya varsa en azından adı, çünkü dosyanın kendisi taşınmaz
Taslağı tarayıcıda tutuyorsan başarılı gönderimden sonra temizlemeyi unutma. Ortak kullanılan bir bilgisayarda localStorage'da unutulmuş yarım mesaj, kurtardığın deneyimden daha pahalıya patlar. Kart bilgisi, kimlik numarası gibi alanlar zaten hiç saklanmamalı.
Girişten sonraki ilk istek neden başarısız olur
Modal içinde giriş yaptıran arayüzlerde en sık atlanan nokta burası. Oturum sabitleme saldırılarına karşı doğru davranış, başarılı girişte oturum kimliğini yenilemektir; PHP'de session_regenerate_id(), diğer platformlarda karşılığı ne ise o. Oturum kimliği değişince, o oturuma bağlı CSRF anahtarı da geçersiz kalır.
Sonuç şu: kullanıcı modalda giriş yapar, arkadaki formu gönderir ve form elindeki eski anahtarla reddedilir. Kullanıcı hata mesajını değil, sadece tepki vermeyen bir düğme görür. Giriş yanıtında yeni anahtarı da geri gönder ve formdaki gizli alanı güncelle; üç satırlık bir iş, atlanınca kullanıcı aynı düğmeye ikinci kez basmak zorunda kalıyor.
Yönlendirmeden kaçınamadığın durumlar
Bazı akışlarda sayfada kalmak mümkün olmuyor: iki adımlı doğrulama, dış kimlik sağlayıcı, ödeme öncesi kimlik kontrolü. Bu durumda hatırlatıcının işi kullanıcıya nereye gittiğini ve döneceğini söylemek.
Dönüş adresini next benzeri bir parametreyle taşıyorsan, gelen değeri olduğu gibi kullanma. Sadece kendi alan adın içindeki yolları kabul et, tam URL gelirse reddet. Aksi halde hatırlatıcı, kullanıcıyı girişten sonra başka bir siteye taşıyan hazır bir açık yönlendirme aracına dönüşür.
Geri dönüşün nereye yapılacağı da açık olmalı. Kullanıcıyı ana sayfaya değil, tetiklediği eylemin bulunduğu yere bırak; mümkünse eylemi tamamlanmış olarak bırak, çünkü kullanıcı zaten bir kere o düğmeye basmıştı.