Memasukkan nama pengguna dan kata sandi adalah salah satu cara untuk mengakses akun, tetapi itu bukan satu-satunya. Dalam artikel ini, kita akan melihat cara mengaktifkan layanan eksternal (seperti Google atau Facebook) saat masuk ke database.
Apa itu Login Layanan Eksternal?
Memberi pengguna opsi untuk mengakses akun sistem mereka melalui layanan eksternal adalah tren yang berkembang di kalangan desainer web. Opsi ini dapat memberikan beberapa manfaat, seperti memberi pengguna lebih sedikit kombinasi nama dan sandi untuk diingat. Ini juga dapat membantu administrator mempersonalisasi pengalaman pengguna.
Ketika aplikasi web menawarkan login layanan eksternal, layar login terlihat seperti gambar di bawah ini. Seorang pengguna dapat memasukkan login dan kata sandi mereka, atau mereka dapat mengklik tombol yang akan mengarahkan mereka ke layanan pilihan mereka (Facebook, Twitter, Google, dll.) di mana mereka akan masuk dan diarahkan ke aplikasi asli.
Berikut adalah contoh layar masuk dari Akademi Vertabelo:
Cara Kerja Login Eksternal
Menambahkan layanan masuk eksternal memerlukan beberapa pekerjaan tambahan dari pengembang. Layanan media sosial paling populer menggunakan protokol yang disebut OAuth 2.0 . Hanya Twitter yang menggunakan protokol lama yang disebut OAuth 1.0 . Protokol memungkinkan pembacaan informasi pengguna seperti nama lengkap, email, jenis kelamin, dll. Informasi pasti yang tersedia bergantung pada layanan media sosial dan apa pun yang diberikan pengguna. (Misalnya, dimungkinkan untuk memiliki akun Facebook tanpa alamat email terlampir.) Namun, kami akan fokus pada bagaimana menerapkan sistem ini dalam desain database.
Sebagai titik awal, kami akan menggunakan artikel kami sebelumnya tentang pemulihan kata sandi dan konfirmasi email sebagai dasar. Berikut adalah tabel terkait pengguna dari artikel ini.
Merancang Database untuk Login Eksternal
Banyak informasi di user_account
tabel terkait dengan penanganan otentikasi – ditambah fitur terkait seperti pengingat kata sandi dan konfirmasi email – milik kami sendiri. Kami tidak memerlukan kolom ini jika pengguna mengautentikasi dengan layanan eksternal. Pengingat kata sandi, konfirmasi email, dan fitur lainnya ditangani oleh layanan eksternal. Langkah pertama dalam desain kami adalah memisahkan user_account
tabel menjadi dua tabel:user_account
dan user_profile
.
user_account
table sekarang menangani semua pembukuan otentikasinya sendiri. user_profile
tabel mewakili informasi pengguna yang sebenarnya:nama, email, zona waktu, persyaratan penerimaan layanan, dan sebagainya. Semua tabel bisnis sekarang harus terkait dengan user_profile
tabel.
Sekarang ke akun eksternal. OAuth protokol, pada akhirnya, memberi kami pengidentifikasi untuk pengguna di sistem mereka. Pengidentifikasi ini bukan nama pengguna di sistem eksternal. Itu hanya pengidentifikasi untuk aplikasi kita. Kami harus menyimpan id internal ini di database kami. Kita bisa menambahkan kolom nullable facebook_id
, google_id
, twitter_id
, dll. ke tabel user_profile
. Tapi kami akan melakukan sesuatu yang berbeda.
Kami akan menambahkan tabel baru:facebook_account
, twitter_account
, google_account
, yang akan menyimpan id eksternal. Dengan cara ini, jika perlu, kami dapat menambahkan informasi tambahan khusus untuk setiap situs web sosial. Jika kami ingin menambahkan kemungkinan masuk untuk situs web sosial lain, kami tidak perlu mengubah user_profile
meja. Kami hanya akan menambahkan external_service_account
tabel.
Setiap tabel baru memiliki format kolom yang sama. Salah satunya adalah int user_profile_id
, yang keduanya merupakan kunci asing yang mereferensikan kolom id di user_profile
tabel dan kunci utama. (Ini dapat berfungsi sebagai kunci utama karena tidak ada dua akun di sistem kami yang boleh dikaitkan dengan beberapa akun dari layanan eksternal yang sama.)
Kolom lainnya akan menjadi id akun eksternal – facebook_id
, misalnya. Ada batasan unik pada setiap facebook_id
, google_id
, dan twitter_id
kolom. Kita tahu tidak ada dua akun yang diberi id yang sama. Faktanya, ketika pengguna diautentikasi dengan layanan eksternal, kami mengetahui facebook_id
mereka . Saat kami menemukan baris yang sesuai di facebook_account
tabel dan temukan user_profile
, kami tahu pengguna mana yang baru saja masuk ke sistem. Jika tidak ada baris dengan id ini, kami membuat baris baru di user_profile
tabel, dan baris baru di tabel akun yang sesuai.
Ini model terakhirnya: