Pelajari cara mengoptimalkan formulir OTP SMS dan meningkatkan kualitas pengalaman pengguna.
Meminta pengguna untuk memberikan OTP (sandi sekali pakai) yang dikirim melalui SMS adalah cara untuk mengonfirmasi nomor telepon pengguna. Ada beberapa kasus penggunaan untuk OTP SMS:
- Autentikasi 2 langkah. Selain nama pengguna dan {i>password<i}, OTP SMS dapat digunakan sebagai sinyal kuat bahwa akun tersebut dimiliki oleh orang yang menerima OTP SMS.
- Verifikasi nomor telepon. Beberapa layanan menggunakan nomor telepon sebagai ID utama. Dalam layanan tersebut, pengguna dapat memasukkan nomor telepon dan OTP yang diterima melalui SMS untuk membuktikan identitasnya. Terkadang sandi digabungkan dengan PIN untuk membentuk otentikasi dua faktor.
- Pemulihan akun. Saat pengguna kehilangan akses ke akunnya, perlu ada sebagai cara untuk memulihkannya. Mengirim email ke alamat email mereka yang terdaftar atau OTP SMS ke nomor telepon mereka adalah metode pemulihan akun yang umum.
- Konfirmasi pembayaran Di sistem pembayaran, beberapa bank atau kartu kredit penerbit meminta autentikasi tambahan dari pembayar untuk alasan keamanan. OTP SMS biasanya digunakan untuk tujuan tersebut.
Postingan ini menjelaskan praktik terbaik dalam membuat formulir OTP SMS untuk penggunaan di atas penggunaan.
Checklist
Untuk memberikan pengalaman pengguna terbaik dengan OTP SMS, ikuti langkah-langkah berikut:
- Gunakan elemen
<input>
dengan:type="text"
inputmode="numeric"
autocomplete="one-time-code"
- Gunakan
@BOUND_DOMAIN #OTP_CODE
sebagai baris terakhir pesan SMS OTP. - Gunakan WebOTP API.
Menggunakan elemen <input>
Menggunakan formulir dengan elemen <input>
adalah praktik terbaik yang paling penting yang
dapat diikuti karena berfungsi
di semua {i>browser<i}. Bahkan jika saran lain dari
postingan ini tidak berfungsi di beberapa browser, pengguna tetap dapat memasukkan dan mengirimkan OTP
secara manual
<form action="/verify-otp" method="POST">
<input type="text"
inputmode="numeric"
autocomplete="one-time-code"
pattern="\d{6}"
required>
</form>
Berikut ini beberapa ide untuk memastikan isian {i>input <i}mendapatkan hasil terbaik fungsi browser.
type="text"
Karena OTP biasanya terdiri dari
lima atau enam digit angka, menggunakan
type="number"
untuk kolom input mungkin tampak intuitif karena dapat mengubah
keyboard ke angka saja. Hal ini tidak disarankan karena browser mengharapkan
isian input adalah angka yang dapat dihitung
daripada rangkaian beberapa angka,
yang dapat menyebabkan
perilaku yang tidak diharapkan. Menggunakan type="number"
menyebabkan naik dan turun
tombol yang akan ditampilkan di samping bidang input; menekan tombol ini
menambah atau mengurangi angka dan
dapat menghapus nol sebelumnya.
Sebagai gantinya, gunakan type="text"
. Tindakan ini tidak akan mengubah keyboard seluler menjadi angka
saja, tetapi itu bukan masalah karena tip berikutnya untuk menggunakan inputmode="numeric"
melakukan
untuk pekerjaan itu.
inputmode="numeric"
Gunakan inputmode="numeric"
untuk mengubah {i>keyboard<i} seluler
menjadi angka saja.
Beberapa situs menggunakan type="tel"
untuk kolom input OTP karena juga
mengubah keyboard seluler menjadi angka saja (termasuk *
dan #
) saat
tetap fokus. Hack ini digunakan sebelumnya saat inputmode="numeric"
tidak didukung secara luas. Sejak Firefox mulai mendukung
inputmode="numeric"
,
tidak perlu menggunakan peretasan type="tel"
yang salah secara semantik.
autocomplete="one-time-code"
autocomplete
memungkinkan developer menentukan izin yang diperlukan browser
harus memberikan bantuan pelengkapan otomatis dan memberi tahu browser tentang
jenis informasi yang diharapkan di lapangan.
Dengan autocomplete="one-time-code"
setiap kali pengguna menerima pesan SMS saat
terbuka, sistem operasi akan mengurai OTP
dalam SMS secara heuris dan
{i>keyboard<i} akan menyarankan OTP
untuk dimasukkan oleh pengguna. Ini hanya berfungsi di Safari 12 dan
di iOS, iPadOS, dan macOS, tetapi kami sangat menyarankan Anda untuk menggunakannya, karena
cara mudah untuk meningkatkan pengalaman OTP
SMS pada platform tersebut.
autocomplete="one-time-code"
meningkatkan kualitas pengalaman pengguna, tetapi masih banyak lagi manfaat lainnya
dapat dilakukan dengan memastikan bahwa pesan SMS mematuhi pesan yang terikat dengan asal
format.
Memformat teks SMS
Tingkatkan pengalaman pengguna saat memasukkan OTP dengan menyelaraskannya dengan kode sekali pakai yang terikat origin yang dikirim melalui SMS spesifikasi pendukung.
Aturan formatnya sederhana: Selesaikan pesan SMS dengan domain penerima
diawali dengan @
dan OTP diawali dengan #
.
Contoh:
Your OTP is 123456
@web-otp.glitch.me #123456
Menggunakan format standar untuk pesan OTP membuat ekstraksi kode dari mereka menjadi lebih mudah dan lebih dapat diandalkan. Mengaitkan kode OTP dengan situs web akan mempersulit upaya menipu pengguna agar memberikan kode ke situs berbahaya.
Penggunaan format ini akan memberikan beberapa manfaat:
- OTP akan terikat dengan domain. Jika pengguna berada di domain selain yang ditentukan dalam pesan SMS, saran OTP tidak akan muncul. Tindakan ini juga mengurangi risiko serangan phishing dan potensi pembajakan akun.
- Browser sekarang dapat mengekstrak OTP dengan andal tanpa bergantung pada heuristik yang misterius dan tidak stabil.
Jika situs menggunakan autocomplete="one-time-code"
, Safari dengan iOS 14 atau yang lebih baru
akan menyarankan OTP dengan mengikuti aturan di atas.
Format pesan SMS ini juga bermanfaat bagi browser selain Safari. Chrome, Opera,
dan Vivaldi di Android juga mendukung aturan kode sekali pakai yang terikat origin dengan
WebOTP API, meskipun tidak melalui autocomplete="one-time-code"
.
Menggunakan WebOTP API
WebOTP API memberikan akses ke OTP
yang diterima melalui pesan SMS. Dengan memanggil
navigator.credentials.get()
dengan jenis otp
(OTPCredential
) dengan transport
menyertakan sms
, situs
akan menunggu SMS yang sesuai dengan kode sekali pakai yang terikat asal
akses yang diberikan dan
diberikan oleh pengguna. Setelah OTP diteruskan ke JavaScript,
situs web dapat menggunakannya dalam bentuk
atau mem-POST-nya langsung ke server.
navigator.credentials.get({
otp: {transport:['sms']}
})
.then(otp => input.value = otp.code);
Pelajari cara menggunakan WebOTP API secara mendetail di Memverifikasi nomor telepon di web
dengan WebOTP API atau salin dan tempel cuplikan berikut. (Buat
pastikan elemen <form>
memiliki atribut action
dan method
yang disetel dengan benar.)
// Feature detection
if ('OTPCredential' in window) {
window.addEventListener('DOMContentLoaded', e => {
const input = document.querySelector('input[autocomplete="one-time-code"]');
if (!input) return;
// Cancel the WebOTP API if the form is submitted manually.
const ac = new AbortController();
const form = input.closest('form');
if (form) {
form.addEventListener('submit', e => {
// Cancel the WebOTP API.
ac.abort();
});
}
// Invoke the WebOTP API
navigator.credentials.get({
otp: { transport:['sms'] },
signal: ac.signal
}).then(otp => {
input.value = otp.code;
// Automatically submit the form when an OTP is obtained.
if (form) form.submit();
}).catch(err => {
console.log(err);
});
});
}
Foto oleh Jason Leung di Buka pembuka.