Saya mencoba membuat otentikasi dasar melalui browser, tetapi saya tidak dapat benar-benar mencapainya.
Jika skrip ini tidak ada di sini, otentikasi browser akan mengambil alih, tetapi saya ingin memberi tahu browser bahwa pengguna akan membuat otentikasi.
Alamatnya harus seperti:
http://username:[email protected]/
Saya punya formulir:
<form name="cookieform" id="login" method="post">
<input type="text" name="username" id="username" class="text"/>
<input type="password" name="password" id="password" class="text"/>
<input type="submit" name="sub" value="Submit" class="page"/>
</form>
Dan sebuah skrip:
var username = $("input#username").val();
var password = $("input#password").val();
function make_base_auth(user, password) {
var tok = user + ':' + password;
var hash = Base64.encode(tok);
return "Basic " + hash;
}
$.ajax
({
type: "GET",
url: "index1.php",
dataType: 'json',
async: false,
data: '{"username": "' + username + '", "password" : "' + password + '"}',
success: function (){
alert('Thanks for your comment!');
}
});
javascript
jquery
ajax
authentication
Patrioticcow
sumber
sumber
Jawaban:
Gunakan
beforeSend
panggilan balik jQuery untuk menambahkan header HTTP dengan informasi otentikasi:sumber
beforeSend: function(xhr) { xhr.setRequestHeader("Authorization", "Basic " + btoa(username + ":" + password)); };
bekerja untuk sayaBagaimana hal berubah dalam setahun. Selain atribut tajuk sebagai pengganti
xhr.setRequestHeader
, jQuery saat ini (1.7.2+) menyertakan atribut nama pengguna dan kata sandi dengan$.ajax
panggilan tersebut.Sunting dari komentar dan jawaban lain: Agar lebih jelas - untuk mengirim otentikasi tanpa
401 Unauthorized
tanggapan terlebih dahulu , alih-alihsetRequestHeader
(pra -1.7) gunakan'headers'
:sumber
username
dan tidakuser
? Juga tidak persis sama: dari dokumen daring dan pengalaman saya sepertinya itu tidak preemptive karena diperlukan beberapa API. Dengan kata lain ia mengirimAuthorization
header hanya ketika kode 401 dikembalikan.Gunakan panggilan balik beforeSend untuk menambahkan header HTTP dengan informasi otentikasi seperti:
sumber
Atau, cukup gunakan properti header yang diperkenalkan di 1.5:
Referensi: API jQuery Ajax
sumber
Contoh di atas agak membingungkan, dan ini mungkin cara terbaik:
Saya mengambil di atas dari kombinasi Rico dan jawaban Yossi.
The btoa fungsi Base64 encode string.
sumber
$.ajaxSetup()
mengatakan "Tetapkan nilai default untuk permintaan Ajax di masa depan. Penggunaannya tidak dianjurkan. "Seperti yang disarankan orang lain, Anda dapat mengatur nama pengguna dan kata sandi secara langsung di panggilan Ajax:
ATAU gunakan properti header jika Anda lebih suka tidak menyimpan kredensial Anda dalam teks biasa:
Apapun cara Anda mengirimnya, server harus sangat sopan. Untuk Apache, file .htaccess Anda akan terlihat seperti ini:
Penjelasan:
Untuk beberapa permintaan lintas domain, browser mengirim permintaan PILIHAN prelight yang tidak ada tajuk otentikasi Anda. Bungkus arahan otentikasi Anda di dalam tag LimitExcept untuk merespons dengan benar pada preflight.
Kemudian kirim beberapa tajuk untuk memberi tahu peramban bahwa browser diizinkan untuk diautentikasi, dan Access-Control-Allow-Origin untuk memberikan izin untuk permintaan lintas situs.
Dalam beberapa kasus, * wildcard tidak berfungsi sebagai nilai untuk Access-Control-Allow-Origin: Anda harus mengembalikan domain persis dari callee. Gunakan SetEnvIf untuk mengambil nilai ini.
sumber
Gunakan fungsi ajaxSetup jQuery , yang dapat mengatur nilai default untuk semua permintaan ajax.
sumber
JSONP tidak bekerja dengan autentikasi dasar sehingga jQuery beforeKirim panggilan balik tidak akan berfungsi dengan JSONP / Script.
Saya berhasil mengatasi batasan ini dengan menambahkan pengguna dan kata sandi ke permintaan (misalnya pengguna: [email protected]). Ini berfungsi dengan hampir semua browser kecuali Internet Explorer mana otentikasi melalui URL tidak didukung (panggilan tidak akan dieksekusi).
Lihat http://support.microsoft.com/kb/834489 .
sumber
Ada 3 cara untuk mencapai ini seperti yang ditunjukkan di bawah ini
Metode 1:
Metode 2:
Metode 3:
sumber
Menurut jawaban SharkAlley itu bekerja dengan nginx juga.
Saya sedang mencari solusi untuk mendapatkan data dengan jQuery dari server di belakang nginx dan dibatasi oleh Pangkalan Auth. Ini bekerja untuk saya:
Dan kode JavaScript adalah:
Artikel yang menurut saya bermanfaat:
sumber