Saya mencari API yang memungkinkan saya masuk ke pengguna dengan memberikan nama pengguna dan kata sandi. Adakah yang punya pengalaman dengan ini?
Untuk memperjelas, saya mencoba membuat kotak masuk AJAX yang muncul sebagai sembulan di beranda, dan jangan me-refresh halaman jika salah kredensial, tetapi hanya jika masuk benar. Jadi, inilah yang telah saya lakukan sejauh ini:
Memperbarui
Saya sekarang memuat formulir login di beranda saya, kemudian saat pengiriman saya meluncurkan permintaan AJAX yang mengirimkan kredensial ke skrip ini:
function user_login_submit_try() {
global $user;
$uid = user_authenticate($_POST['name'],$_POST['pass']);
$arr = array ('name'=>$_POST['name'],'pass'=>$_POST['pass']);
if ($uid){
$user = user_load($uid);
user_login_finalize($arr);
}
echo drupal_json_encode($uid);
exit;
};
Sejauh ini berhasil, tetapi kekhawatiran saya adalah (seperti yang disebutkan oleh googletorp) masalah keamanan; tampaknya tidak ada API yang saya gunakan dalam skrip ini yang membersihkan data.
Adakah yang melihat cara yang lebih baik untuk melakukannya?
Jawaban:
Ini mungkin membantu seseorang:
Versi yang lebih baik berdasarkan komentar:
sumber
hook_user_insert
tetapi fungsi di atas dalam jawaban ingin kata sandi sebagai teks biasa asli. Saya kira saya harus mencobahook_form_alter
sebagai gantinya ...Tidak ada fungsi API sederhana untuk itu.
Anda dapat melakukan apa yang Drupal lakukan:
Timpa
global $user
.Menangani sesi
Untuk langkah dua dan 3 lihat
user_login_submit()
Semua fungsi ini didasarkan pada dipanggil dari formulir. Aliran normal adalah bahwa penangan yang valid menguji input pengguna dan mengembalikan uid pengguna jika validasi berlalu. Pengirim menyerahkan kemudian menangani login pengguna yang sebenarnya dan menelepon pengait pengguna.
sumber
$form_state['value']['name'] = $_POST['name']
dan seterusnya ..$form_state
variabel. Ada banyak pemeriksaan keamanan yang bagus bahwa Anda akan kehilangan dan mungkin membuka situs Anda untuk serangan. Ketika datang ke login pengguna, Anda tidak ingin kehilangan keamanan itu.Jika Anda perlu mendapatkan objek pengguna untuk akun pengguna yang Anda ketahui nama pengguna dan kata sandinya, maka Anda dapat menggunakan kode berikut:
$account
akan terjadiFALSE
jika objek pengguna tidak dapat ditemukan atau dimuat.Anda harus menggunakan kode ini ketika, misalnya, modul Anda mendapatkan nama pengguna dan kata sandi sebagai input dari pengguna, memverifikasi apakah mereka benar, dan kemudian melakukan sesuatu dengan objek pengguna.
Jika Anda menulis modul yang perlu menyamar sebagai pengguna untuk menulis komentar, atau melakukan hal lain yang perlu dihasilkan seperti yang dilakukan oleh pengguna, itulah yang dilakukan modul pelacakan masalah Proyek saat menutup laporan masalah yang telah ada di status tetap selama dua minggu (dalam hal itu, ia menambahkan komentar "Secara otomatis ditutup - masalah diperbaiki selama 2 minggu tanpa aktivitas" yang hasilnya ditulis oleh pengguna "Pesan Sistem"), maka Anda tidak memerlukan nama pengguna dan kata sandi. Anda hanya memuat objek pengguna yang Anda tahu ID pengguna.
Sejauh yang saya tahu, tidak ada masalah keamanan dengan kode yang saya laporkan.
Anda dapat membatasi jumlah login yang gagal; atau untuk sementara memblokir IP yang mencoba masuk tanpa hasil, atau mencoba login yang berbeda dalam waktu singkat.
sumber
Kode ini benar-benar berfungsi
sumber
Dibersihkan jawaban dari atas. Memeriksa pengguna dan kata sandi adalah fitur tambahan. Selain itu, form_state palsu harus berupa variabel yang harus dilewatkan dengan merujuk ke fungsi atau ada kesalahan.
Karena itu kami memiliki:
sumber
Pengguna akan menerima sesi dan juga akan masuk ke halaman lain:
sumber
Terkadang kita memerlukan login cepat dari URL atau Lupa kata sandi admin. Cukup terapkan di bawah ini dua fungsi untuk login sebagai pengguna 1 di Drupal.
sumber