Saya telah melalui ini dengan sled.com. Ada beberapa masalah di sini terkait dengan pembuatan akun dan mendukung beberapa akun pihak ketiga untuk login. Beberapa dari mereka adalah:
- Apakah Anda perlu mendukung kata sandi lokal dan login pihak ketiga?
Untuk sled.com, saya telah memutuskan untuk menghapus kata sandi lokal karena nilai yang ditambahkannya kecil dan biaya tambahan dalam mengamankan formulir entri kata sandi. Ada banyak serangan yang dikenal karena melanggar kata sandi dan jika Anda akan memperkenalkan kata sandi, Anda harus memastikannya tidak mudah dipecahkan. Anda juga perlu menyimpannya dalam hash satu arah atau yang serupa untuk mencegahnya bocor.
- Berapa banyak fleksibilitas yang ingin Anda izinkan dalam mendukung beberapa akun pihak ketiga?
Sepertinya Anda sudah memilih tiga penyedia login: Facebook, Twitter, dan LinkedIn. Itu bagus karena itu berarti Anda menggunakan OAuth dan bekerja dengan satu set penyedia tepercaya yang terdefinisi dengan baik. Saya bukan penggemar OpenID. Pertanyaan yang tersisa adalah apakah Anda perlu mendukung beberapa akun pihak ketiga dari penyedia yang sama (mis. Satu akun lokal dengan dua akun Twitter yang ditautkan). Saya berasumsi tidak, tetapi jika Anda melakukannya, Anda harus mengakomodasi itu dalam model data Anda.
Untuk Sled, kami mendukung login dengan Facebook, Twitter, dan Yahoo! dan di dalam setiap akun pengguna menyimpan kunci untuk masing-masing: {"_id": "djdjd99dj", "yahoo": "dj39djdj", twitter: "3723828732", "facebook": "12837287"}. Kami menyiapkan banyak kendala untuk memastikan bahwa setiap akun pihak ketiga hanya dapat ditautkan ke satu akun lokal.
Jika Anda akan mengizinkan beberapa akun dari penyedia pihak ketiga yang sama, Anda perlu menggunakan daftar atau struktur lain untuk mendukungnya, dan dengan itu, semua pembatasan lain untuk memastikan keunikan.
- Bagaimana cara menautkan banyak akun?
Pertama kali pengguna mendaftar untuk layanan Anda, mereka pertama-tama pergi ke penyedia pihak ketiga dan kembali dengan id pihak ketiga yang terverifikasi. Anda kemudian membuat akun lokal untuk mereka dan mengumpulkan informasi apa pun yang Anda inginkan. Kami mengumpulkan alamat email mereka dan juga meminta mereka untuk memilih nama pengguna lokal (kami mencoba mengisi ulang formulir dengan nama pengguna yang ada dari penyedia lain). Memiliki beberapa bentuk pengenal lokal (email, nama pengguna) sangat penting untuk pemulihan akun nanti.
Server tahu ini adalah login pertama kali jika browser tidak memiliki cookie sesi (valid atau kedaluwarsa) untuk akun yang ada, dan bahwa akun pihak ketiga yang digunakan tidak ditemukan. Kami mencoba memberi tahu pengguna bahwa mereka tidak hanya masuk, tetapi membuat akun baru sehingga jika mereka sudah memiliki akun, mereka diharapkan akan berhenti sebentar dan masuk dengan akun mereka yang sudah ada.
Kami menggunakan aliran yang sama persis untuk menautkan akun tambahan, tetapi ketika pengguna kembali dari pihak ketiga, keberadaan cookie sesi yang valid digunakan untuk membedakan antara upaya untuk menautkan akun baru ke tindakan login. Kami hanya mengizinkan satu akun pihak ketiga dari setiap jenis dan jika sudah ada satu yang tertaut, blokir tindakan tersebut. Seharusnya tidak menjadi masalah karena antarmuka untuk menautkan akun baru dinonaktifkan jika Anda sudah memiliki satu (per penyedia), tetapi untuk berjaga-jaga.
- Bagaimana cara menggabungkan akun?
Jika pengguna mencoba menautkan akun pihak ketiga baru yang sudah ditautkan ke akun lokal, Anda cukup meminta mereka untuk mengkonfirmasi bahwa mereka ingin menggabungkan kedua akun tersebut (dengan asumsi Anda dapat menangani penggabungan tersebut dengan kumpulan data Anda - seringkali lebih mudah dikatakan daripada dilakukan). Anda juga dapat memberi mereka tombol khusus untuk meminta penggabungan tetapi dalam praktiknya, yang mereka lakukan hanyalah menautkan akun lain.
Ini adalah mesin negara yang cukup sederhana. Pengguna kembali dari pihak ketiga dengan id akun pihak ketiga. Database Anda bisa di salah satu dari tiga negara:
- Akun ini ditautkan ke akun lokal dan tidak ada cookie sesi -> Login
- Akun tersebut ditautkan ke akun lokal dan cookie sesi hadir -> Gabung
- Akun tidak tertaut ke akun lokal dan tidak ada cookie sesi -> Daftar
Akun tidak tertaut ke akun lokal dan cookie sesi hadir -> Menautkan akun tambahan
- Bagaimana cara melakukan pemulihan akun dengan penyedia pihak ketiga?
Ini masih merupakan wilayah percobaan. Saya belum melihat UX yang sempurna untuk ini karena sebagian besar layanan menyediakan kedua kata sandi lokal di sebelah akun pihak ketiga dan oleh karena itu fokus pada kasus penggunaan "forget my password", bukan semua hal lain yang bisa salah.
Dengan Sled, kami memilih untuk menggunakan "Perlu bantuan masuk?" dan ketika Anda mengklik, minta pengguna untuk email atau nama pengguna mereka. Kami mencarinya dan jika kami menemukan akun yang cocok, kirim tautan tersebut melalui email kepada pengguna yang secara otomatis dapat memasukkan mereka ke dalam layanan (baik untuk satu kali). Setelah masuk, kami membawanya langsung ke halaman yang menghubungkan akun, memberi tahu mereka bahwa mereka harus melihat dan berpotensi menautkan akun tambahan, dan menunjukkan kepada mereka akun pihak ketiga yang telah mereka tautkan.