Saya akan mulai mengerjakan prototipe untuk klien - dan salah satu fitur yang diperlukan adalah integrasi dengan sistem otentikasi / registrasi pengguna internal.
Sistem ini akan bertindak sebagai basis data pengguna yang resmi, dan menyediakan antarmuka yang TENANG untuk membuat pengguna baru, dan mengautentikasi pengguna yang valid.
Saya harus dapat membuat pengguna baru di WP dan sebagai bagian dari proses itu membuat panggilan ke API otentikasi eksternal untuk membuat / memvalidasi pengguna itu.
Seseorang yang adalah pengguna yang valid tetapi tidak dikenal oleh WP harus dapat login untuk berkomentar, tanpa harus mendaftar di situs WP sendiri.
Seseorang yang masuk ke situs web keseluruhan juga harus secara otomatis masuk ke WordPress.
Saya pikir yang berikut ini adalah jalan yang harus ditempuh.
Untuk (1) - apakah ada kait registrasi yang dapat saya gunakan?
Untuk (2) - Saya berasumsi saya mengaitkan filter otentikasi - yaitu ketika seseorang mencoba masuk, saya menjebaknya, melakukan panggilan ke sistem eksternal, dan kemudian memproses login WP atau mengarahkan mereka ke proses pendaftaran di mana ( 1) menerima tawaran.
Untuk (3) - baca cookie login yang ditetapkan oleh situs utama dan lanjutkan dengan (2)?
Saya kira saya juga harus memasukkan catatan ke tabel pengguna dan usermeta.
Jadi, apakah hal di atas masuk akal - saya belum memikirkan sesuatu. Siapa pun punya sumber daya yang bagus untuk membantu dengan ini (@reak - Saya melihat Anda telah melakukan beberapa pekerjaan dalam hal ini !!).
Memperbarui
Jadi saya masih sedikit membenturkan kepala terhadap hal ini, pada dasarnya saya mencoba menghubungkan ke filter otentikasi, dan menggunakannya untuk:
- memeriksa apakah cookie masuk untuk situs 'master' telah ditetapkan, dan jika ya, validasi ulang terhadap API autentikasi mereka, dan jika valid, paksa masuk dengan WP
wp_signon()
, menggunakan informasi yang terkandung dalam cookie situs master (email dan kata sandi hash) sebagai kredensial untuk WP - jika cookie tidak disetel, arahkan ke halaman login situs master dan dapatkan login / pendaftaran lalu kembali ke langkah 1
- jika tidak ada pengguna WP ketika ada pengguna situs master yang diautentikasi, buatlah dan kemudian jadi 'transparan' (yaitu agar pengguna tidak melihat formulir login WP)
Pada dasarnya, saya ingin menyembunyikan formulir login WP sepenuhnya untuk pengguna yang hanya akan berkomentar, dan kemudian menemukan cara untuk memungkinkan penulis dan admin untuk mengaksesnya secara langsung.
Ini berjalan cukup lambat, inilah yang bisa saya gunakan bantuan:
apakah filter otentikasi yang tepat untuk digunakan? Tampaknya tidak dipanggil dalam semua situasi yang saya harapkan - misalnya widget meta menampilkan tautan masuk / keluar tanpa penguncian kait autentikasi
saya bisa
wp_signon()
mengembalikanWP_User
objek (menunjukkan keberhasilan), tetapi itu tidak mempengaruhi status login - yaitu widget meta masih akan ditampilkan di "Login" bahkan setelah menyegarkan.
Setiap bantuan dengan penuh terima kasih :)
Jawaban:
OK, pendekatan yang bekerja untuk saya adalah sebagai berikut:
Asumsikan bahwa basis data pengguna situs utama adalah otoritatif. Cookie login situs utama berisi ID dan hash kata sandi situs.
Dapatkan cookie dari situs utama dan validasi ulang terhadap API autentikasi situs utama
Jika valid, gunakan alamat email dari nilai balik sebagai
'user_login'
nilai untuk WP, dan kata sandi situs hash sebagai kata sandi WP.Uji apakah pengguna ini ada di WP dengan menggunakan
wp_authenticate('user_login', 'user_pass')
. Ini mengembalikan aWP_User
objek pada kesuksesan, atauWP_Error
objek pada kegagalan.Jika
WP_Error/is_wp_error()
, kemudian gunakan gunakanwp_update_user()
untuk membuat pengguna (atau memperbarui pengguna dengan kata sandi yang diubah).Login melalui
wp_set_current_user()
,wp_set_auth_cookie()
dando_action('wp_login, id)
(Ini semua terkandung dalam fungsi yang terlampir pada
'init'
tindakan)Ini tampaknya berfungsi - pengguna situs yang valid yang tidak dikenal dengan WP secara otomatis dibuat. Perubahan kata sandi dipenuhi, dan jika cookie situs diatur, dan pengguna WP ada, SSO otomatis dan sangat mulus.
sumber
Seluruh sistem otentikasi dapat dicolokkan. Saya sarankan melihat plugin yang ada untuk mendapatkan ide bagaimana menimpa sistem. Mungkin dengan melihat beberapa plugin LDAP ?
sumber
Beberapa fungsi yang berhubungan dengan pengguna didefinisikan kondisional pada
!function_exists()
diwp-includes/pluggable.php
dan mudah untuk menimpa dengan versi Anda sendiri.sumber
Mengaktifkan Single-Sign-On di WordPress membutuhkan waktu lebih dari 18 jam untuk saya tetapi mungkin hanya perlu beberapa menit:
Pada dasarnya, Anda ingin menggunakan https://wordpress.org/plugins/wp-force-login/ dan versi modifikasi https://as.wordpress.org/plugins/jwt-authenticator/ dan kemudian membuat auth endpoint yang dilindungi di situs utama Anda yang menghasilkan JWT (JSON Web Token) dan mengarahkan kembali ke URL khusus situs WordPress Anda.
Lihat kode lengkap di sini .
sumber