Masalah bahawa kuki sesi tidak boleh disimpan selepas penggunaan aplikasi
P粉312631645
P粉312631645 2023-08-29 09:37:44
0
1
481
<p>Saya mencipta aplikasi bahagian hadapan menggunakan React dan kemudian menggunakannya pada Netlify. Aplikasi bahagian hadapan berinteraksi dengan aplikasi bahagian belakang ekspres yang saya buat dan gunakan untuk Render. Sebarang interaksi antara frontend dan backend dilindungi oleh pengesahan menggunakan passportjs. Aplikasi bahagian belakang menggunakan dasar tempatan pasport untuk mengesahkan bahawa pengguna wujud/bahawa nama pengguna dan kata laluan adalah betul dengan menyambung ke mongoDB. Setelah disahkan, saya menggunakan fungsi pensirilan dan penyahserilangan pasport untuk mengekalkan sesi log masuk. </p> <p>Semasa pembangunan, saya menggunakan aplikasi ini di http://localhost. Sementara itu, semuanya berfungsi seperti yang diharapkan. Sesi log masuk disimpan sebagai kuki, yang saya boleh hantar ke aplikasi bahagian belakang sebagai sebahagian daripada permintaan masa hadapan untuk mengesahkan pengguna. </p> <p>Apabila saya menggunakan apl bahagian hadapan ke Netlify dan apl bahagian belakang ke Render, kuki sesi tidak lagi disimpan, yang bermaksud pengguna tidak boleh mengesahkan di bahagian belakang kerana setiap permintaan selepas log masuk Kuki sesi yang disimpan dihantar ke bahagian belakang . </p> <p>Dalam lebih terperinci, untuk sesi ekspres digunakan dengan pasport untuk mencipta sesi log masuk, saya menggunakan connect-mongo untuk menyimpan sesi pada MongoDB. Setiap kali saya log masuk melalui bahagian hadapan, saya dapat melihat sesi dibuat dan disimpan dalam MongoDB. Masalahnya nampaknya kuki dalam respons tidak dilepaskan dan saya tidak tahu mengapa. </p> <p>Berikut ialah pilihan sesi semasa saya dalam aplikasi bahagian belakang ekspres saya: </p> <pre class="brush:php;toolbar:false;">app.use( sesi({ rahsia: process.env.SESSION_SECRET, simpan: palsu, saveUninitialized: palsu, kedai: MongoStore.create({ mongoUrl: process.env.MONGODB_URI }), kuki: { selamat: benar, sameSite: "tiada", httpSahaja: benar, tamat tempoh: 24 * 60*60*1000 } }) );</pra> <p>Saya telah cuba mencari penyelesaian dan mencuba banyak pilihan termasuk menukar <kod>secure</code>, menukar <code>httpOnly</code>, menukar <code>sameSite</code> palsu dan tiada, tambah <kod>domain</kod> menunjuk ke URL hujung hadapan dan <kod>domain</kod> yang lain yang menunjuk ke URL bahagian belakang, alih keluar sebarang pakej keselamatan yang telah saya pasang seperti topi keledar dan pengehad kadar, tetapi macam takde kesan pun.</p> <p>Saya juga menetapkan pengepala Kawalan Akses bukti kelayakan kepada benar: </p> <pre class="brush:php;toolbar:false;">app.use((req, res, next) => { res.setHeader("Access-Control-Allow-Origin", process.env.DOMAIN_URL); res.setHeader("Access-Control-Allow-Credentials", true); res.setHeader("Kawalan-Akses-Benarkan-Pengepala", "Jenis-Kandungan"); res.header("Kaedah-Kawalan-Akses-Benarkan-", "DAPATKAN, LETAK, SIAR, PADAM"); seterusnya(); });</pre> <p>Untuk semua permintaan, saya menggunakan <code>fetch</code>. Saya menghadapi soalan yang serupa dengan saya, tetapi ia tidak dijawab: Penyemak imbas tidak menyimpan kuki sesi daripada pelayan merentas domain</p> <p>Sebarang bantuan atau nasihat amat kami hargai! </p>
P粉312631645
P粉312631645

membalas semua(1)
P粉714890053

Masalah telah selesai. Masalahnya ialah dengan mempercayai proksi. Memandangkan saya menjalankan berbilang pelayan nama, bahagian belakang berada di belakang proksi terbalik. Dengan mendayakan mempercayai proksi, aplikasi bahagian belakang saya akan memahami bahawa ia berada di belakang proksi dan boleh mempercayai medan pengepala X-Forwarded. Untuk mendayakannya, saya menambahkan kod berikut dalam aplikasi bahagian belakang saya:

app.set("trust proxy", 1);
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan