วิธีสร้างงาน laravel, vue session csrf

แบบฟอร์ม Laravel ต้องใช้ csrf จึงจะทำงานได้

หากฉันสร้างแอปพลิเคชันสปาหน้าเดียวด้วย vue+laravel เพื่อให้เทมเพลต laravel ของฉันมีเพียง html และเนื้อหาที่ว่างเปล่า และผู้ใช้ไม่ได้รีเฟรชหน้าเลยจริงๆ ในระหว่างทำงานกับแอปเป็นเวลาหลายชั่วโมง (หน้าไม่รีเฟรชเนื่องจาก ทุกอย่างอยู่กับอาแจ็กซ์)

ฉันจะทำให้เซสชันการเข้าสู่ระบบยังคงอยู่ได้อย่างไร ฉันจะทำให้ csrf ทำงานได้อย่างไร หรือฉันสามารถปิดการใช้งานมันได้หรือไม่? แอปพลิเคชันไม่ทำอะไรเลยโดยไม่ต้องเข้าสู่ระบบก่อน


person gray_15    schedule 22.01.2020    source แหล่งที่มา
comment
stackoverflow.com/questions/37806762/   -  person first    schedule 22.01.2020
comment
github.com/laravel/airlock   -  person Jerodev    schedule 22.01.2020


คำตอบ (1)


หากคุณใช้ axios กับ Vue2 สำหรับคำขอ ajax ของคุณ csrf มีอยู่แล้วใน bootstrap.js คุณจะเห็นบรรทัดนี้

let token = document.head.querySelector('meta[name="csrf-token"]');

หากคุณต้องการยืนกรานสำหรับอาแจ็กซ์ของคุณเท่านั้น คุณจะต้องใส่บรรทัดนี้ไว้ในตะขอที่ติดตั้งของคุณ

mounted() {
    this.csrfToken = document.querySelector('meta[name="csrf-token"]').content
},

ควรแนบ csrfToken นี้ในรูปแบบของคุณเช่นนี้

<form :method="method.toUpperCase() == 'GET' ? 'GET' : 'POST'">
    <input-hidden :value="csrfToken" name="_token"/>

    <input-hidden
        v-if="['GET', 'POST'].indexOf(method.toUpperCase()) === -1"
        :value="method"
        name="_method"
    />

    <!--
        This hidden submit button accomplishes 2 things:
            1: Allows the user to hit "enter" while an input field is focused to submit the form.
            2: Allows a mobile user to hit "Go" in the on-screen keyboard to submit the form.
    -->
    <input type="submit" class="absolute invisible z-0">

    <slot/>
</form>

เพื่อเป็นตัวอย่างที่ดี ลองดู โทเค็น csrf

หมายเหตุ: โปรดอย่าปิดการใช้งานโทเค็น csrf เนื่องจากเป็นเพียงวิธีเดียวในการรักษาความปลอดภัยคำขอของคุณไปยังเซิร์ฟเวอร์

person Qonvex620    schedule 22.01.2020
comment
หากแอป vuea ของฉันเป็นหน้าเดียว และหน้านั้นไม่เคยรีเฟรชเลยจริงๆ ฉันจำเป็นต้องทำหรือไม่ และหากใช่ ฉันจะอัปเดต csrfToken ใหม่ลงในแบบฟอร์มของฉันได้อย่างไร - person gray_15; 23.01.2020