10
โทเค็นต่อต้านการปลอมแปลงมีไว้สำหรับผู้ใช้“” แต่ผู้ใช้ปัจจุบันคือ“ ชื่อผู้ใช้”
ฉันกำลังสร้างแอปพลิเคชันหน้าเดียวและประสบปัญหาเกี่ยวกับโทเค็นต่อต้านการปลอมแปลง ฉันรู้ว่าทำไมปัญหาจึงเกิดขึ้นฉันไม่รู้วิธีแก้ไข ฉันได้รับข้อผิดพลาดเมื่อเกิดเหตุการณ์ต่อไปนี้: ผู้ใช้ที่ไม่ได้เข้าสู่ระบบจะโหลดกล่องโต้ตอบ (พร้อมกับโทเค็นต่อต้านการปลอมแปลงที่สร้างขึ้น) ผู้ใช้ปิดกล่องโต้ตอบ ผู้ใช้เข้าสู่ระบบ ผู้ใช้เปิดกล่องโต้ตอบเดียวกัน ผู้ใช้ส่งแบบฟอร์มในกล่องโต้ตอบ โทเค็นต่อต้านการปลอมแปลงมีไว้สำหรับผู้ใช้ "" แต่ผู้ใช้ปัจจุบันคือ "ชื่อผู้ใช้" สาเหตุที่เกิดขึ้นเนื่องจากแอปพลิเคชันของฉันเป็นแบบหน้าเดียว 100% และเมื่อผู้ใช้เข้าสู่ระบบผ่านการโพสต์ ajax สำเร็จ/Account/JsonLoginฉันก็เพียงแค่เปลี่ยนมุมมองปัจจุบันด้วย "มุมมองที่ได้รับการรับรองความถูกต้อง" ที่ส่งคืนจากเซิร์ฟเวอร์ แต่อย่าโหลดซ้ำ หน้า. ฉันรู้ว่านี่เป็นสาเหตุเพราะถ้าฉันโหลดหน้าซ้ำระหว่างขั้นตอนที่ 3 และ 4 อย่างง่ายจะไม่มีข้อผิดพลาด ดังนั้นดูเหมือนว่า@Html.AntiForgeryToken()ในฟอร์มที่โหลดจะยังคงส่งคืนโทเค็นสำหรับผู้ใช้เก่าจนกว่าเพจจะโหลดซ้ำ ฉัน@Html.AntiForgeryToken()จะเปลี่ยนเพื่อส่งคืนโทเค็นสำหรับผู้ใช้ใหม่ที่ได้รับการรับรองความถูกต้องได้อย่างไร ฉันฉีดใหม่GenericalPrincipalด้วยการกำหนดเองIIdentityทุกApplication_AuthenticateRequestครั้งที่@Html.AntiForgeryToken()ถูกเรียกว่าHttpContext.Current.User.Identityอันที่จริงแล้ว Identity ที่กำหนดเองของฉันพร้อมIsAuthenticatedคุณสมบัติถูกตั้งค่าเป็น true และ@Html.AntiForgeryTokenยังดูเหมือนว่าจะแสดงโทเค็นสำหรับผู้ใช้เก่าเว้นแต่ฉันจะโหลดหน้าซ้ำ