Persekitaran
Halaman hadapan: uni-app
Halaman belakang: thinkphp6
Semasa membuat log masuk bahagian hadapan halaman, saya ingin log masuk Halaman memanggil fungsi kod pengesahan bahagian belakang thinkphp6, jadi bahagian hadapan cuba mendapatkan alamat imej captcha melalui antara muka api bahagian belakang. Kaedah yang dicuba adalah untuk menetapkan kaedah api belakang getCaptcha Selepas memanggil captcha_src() dalam kaedah, alamat imej boleh diperolehi, dan kemudian kembali ke panggilan bahagian hadapan, imej kod pengesahan boleh dipaparkan seperti biasa. Tetapi inilah masalah apabila log masuk, ia sentiasa menggesa bahawa kod pengesahan adalah salah. Kemudian, selepas perbandingan, saya mendapati bahawa ID sesi kod pengesahan yang diperolehi tidak konsisten dengan ID sesi semasa saya log masuk dan menyerahkan, jadi pengesahan gagal.
Mengapa apabila bahagian hadapan menghala ke alamat kod pengesahan thinkphp6 melalui alamat src tag img, sessionID yang dijana oleh latar belakang adalah berbeza daripada sessionID yang dijana semasa saya beroperasi pada halaman semasa This mekanisme masih tidak jelas.
Kemudian saya melihat bahawa terdapat kaedah create() dalam kelas captcha untuk terus menjana kod pengesahan Selepas ujian, memanggil kaedah ini melalui API boleh menghasilkan kod pengesahan dan sessionID adalah konsisten dengan sessionID apabila saya log masuk kemudian, tetapi saya menghadapi satu lagi masalah ialah kaedah create() ini mengembalikan kaedah respons, dan uni.request pada bahagian hadapan tidak boleh diperoleh, menyebabkan imej kod pengesahan tidak dapat dipaparkan. Selepas berfikir, saya memutuskan untuk mengubah suai kelas captcha dan menukar kaedah create() kepada kaedah baharu yang lain Kaedah ini mengembalikan pengekodan base64 bagi kod pengesahan yang dijana, dan kemudian mengembalikan hasil rentetan ke hujung hadapan boleh Paparan biasa dan log masuk pengesahan.
Kod khusus adalah seperti berikut:
1 Tambah kaedah createApi() bagi kelas captcha ini sebenarnya adalah salinan create(), tetapi nilai yang dikembalikan diubah suai seperti berikut :
$base64_data = 'data:image/png;base64,' . base64_encode($content);//合成图片的base64编码 return $base64_data;
2. api方法调用返回
public function getCaptcha(){ $captcha = Captcha::createApi(); return apiResultShow(config("status.success"),lang("success"),$captcha); }
3 Bahagian hadapan menerima dan memaparkan kod pengesahan
<view @click="getCaptcha()"> <captcha-img :captchaSrc="captchaSrc" ></captcha-img> </view> ....... ......... ........... ............. getCaptcha(){ var request_data = {}; var sign = this.sign(request_data); uni.request({ url: '/url/api/member/getCaptcha', data: { sign:sign }, method: 'POST', header:{ "Content-Security-Policy": "upgrade-insecure-requests", "X-Requested-With": "XMLHttpRequest", }, dataType:'json', success: (res) => { if(res.data.status == 0){ var img_src = res.data.result; this.captchaSrc = img_src; }else{ this.captchaSrc =""; } } }); },
Disyorkan: " 10 tutorial video thinkphp terkini》
Atas ialah kandungan terperinci Bagaimanakah bahagian hadapan memanggil kod pengesahan tp6 bahagian belakang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!