Lỗi 419 Page Expired rất phổ biến và dễ sửa trong ứng dụng Laravel. Nguyên nhân là do cơ chế khung nội bộ được gọi là bảo vệ CSRF. CSRF là viết tắt của Cross-Site Request Forgery và là một trong những cuộc tấn công phổ biến nhất
Bố cục trang lỗi có thể khác nhau giữa các phiên bản khung, nhưng mã lỗi [419] và thông báo lỗi [Page Expired] giống nhau. Ảnh chụp màn hình sau đến từ Laravel 8
Để tránh sự cố này, mọi yêu cầu POST, PUT, PATCH và DELETE phải có mã thông báo csrf làm tham số. Tùy thuộc vào cách bạn gửi yêu cầu, bạn có một số tùy chọn để thêm tham số này
Giải pháp số 1 – Chỉ thị lưỡi cắt
When you create a form in a Blade template, the solution is extremely simple. Blade template engine has a built-in directive @csrf that generates a hidden HTML input containing the token. The directive should be added just after opening tag.
@csrf Email Password Save
Ngoài ra, bạn có thể tạo đầu vào mã thông báo theo cách thủ công, sử dụng phương thức csrf_token[]. Kết quả sẽ giống hệt nhau
Giải pháp #2 – Tiêu đề của yêu cầu Ajax
Đối với yêu cầu Ajax, giải pháp hơi khác một chút, nhưng cũng khá đơn giản. Tất cả những gì bạn phải làm là thêm mã thông báo csrf vào phần đầu của tài liệu HTML và gửi dưới dạng tiêu đề X-CSRF-TOKEN cùng với yêu cầu của bạn
var request; var form = $["form"]; var data = { 'email': form.find['input[name="email"]'].val[], 'password': form.find['input[name="password"]'].val[] }; var headers = { 'X-CSRF-TOKEN': $['meta[name="csrf-token"]'].attr['content'] } request = $.ajax[{ url: "/register", type: "post", headers: headers, data: data }]; request.done[function []{ console.log["It works!"]; }];
Giải pháp số 3 – Vô hiệu hóa xác thực CSRF cho một số điểm cuối
Đối với một số điểm cuối cụ thể, bạn có thể tắt xác thực CSRF. Có thể loại trừ các URL cụ thể trong mảng $ngoại trừ của lớp VerifyCsrfToken. Bằng cách này, bạn có thể loại trừ URL chính xác hoặc nhóm URL có tiền tố chung
// /app/Http/Middleware/VerifyCsrfToken.php class VerifyCsrfToken extends Middleware { protected $except = [ 'payment/*', // exclude all URLs wit payment/ prefix 'user/add' // exclude exact URL ]; }
Loại trừ khỏi bảo vệ CSRF chỉ nên được sử dụng cho các điểm cuối được sử dụng bởi các ứng dụng bên ngoài [như nhà cung cấp dịch vụ thanh toán]. Tuy nhiên, cũng rất tiện lợi khi sử dụng tệp định tuyến api khi bạn có nhiều điểm cuối như vậy. Họ sẽ tự động bị loại khỏi bảo vệ CSRF
Phần kết luận
Tính năng bảo vệ CSRF theo mặc định được bật cho tất cả các yêu cầu POST, PUT, PATCH và DELETE trong tệp định tuyến web [những yêu cầu trong tệp api bị loại trừ]. Cách tiếp cận đó có nhiều ưu điểm và cho phép các nhà phát triển tập trung vào các vấn đề phức tạp hơn. Tuy nhiên, điều đó cũng có thể gây nhầm lẫn cho các lập trình viên ít kinh nghiệm hơn vì đòi hỏi nhiều kiến thức hơn về vòng đời yêu cầu. Dù sao, ba giải pháp tôi đã trình bày trong bài đăng này là quá đủ để xử lý tất cả các trường hợp sử dụng có thể và dễ dàng làm việc với mã thông báo CSRF trong các ứng dụng Laravel
SEO & Kỹ thuật số toàn diện đã được xây dựng bởi Koray Tuğberk GÜBÜR. SEO toàn diện là quá trình phát triển các dự án tiếp thị kỹ thuật số tích hợp với mọi khía cạnh bao gồm Viết mã, Xử lý ngôn ngữ tự nhiên, Khoa học dữ liệu, Tốc độ trang, Phân tích kỹ thuật số, Tiếp thị nội dung, SEO kỹ thuật và Xây dựng thương hiệu. Công cụ tìm kiếm ngữ nghĩa, có cấu trúc cải thiện khả năng phát hiện các thực thể trong thế giới thực, ngày nay. Có một trang web đơn giản là không đủ nữa. Để chứng tỏ rằng thương hiệu của bạn có thẩm quyền, đáng tin cậy và là chuyên gia trong lĩnh vực riêng của nó, bạn cần có các Dự án Tối ưu hóa Công cụ Tìm kiếm dựa trên thực thể. Trọng tâm chính của SEO & Kỹ thuật số toàn diện là cải thiện khả năng hiển thị hữu cơ và tiềm năng tăng trưởng của thương hiệuĐiều này xảy ra do lỗi xác minh mã thông báo CSRF, bộ đệm được định cấu hình sai, quyền, cài đặt phiên không đúng, v.v.
Tại Bobcares, chúng tôi sửa lỗi Laravel, như một phần của Dịch vụ quản lý máy chủ của chúng tôi
Hôm nay, chúng ta hãy xem xét lỗi phiên hết hạn. Chúng tôi cũng sẽ xem các Kỹ sư hỗ trợ của chúng tôi khắc phục sự cố như thế nào
Lỗi Laravel. 419 phiên đã hết hạn
Laravel là một framework phát triển web. Nó cho phép tùy chỉnh cấu hình. Và người dùng/nhà phát triển có thể tạo một. env cho mục đích này
Theo mặc định, Laravel là một ứng dụng điều khiển HTTP. Phiên cung cấp các cách để lưu trữ thông tin. Các tùy chọn khả dụng là tệp, cookie, cơ sở dữ liệu, Memcached hoặc Redis và mảng
Lỗi này xuất hiện khi người dùng gửi yêu cầu đăng bài. Lỗi ở giao diện người dùng xuất hiện dưới dạng,
Và, trong dòng lệnh, lỗi xuất hiện dưới dạng,
419 Sorry, your session has expired. Please refresh and try again.
Nhiều nguyên nhân có thể dẫn đến lỗi hết phiên. Những lý do rõ ràng nhất là lỗi mã thông báo CSRF, bộ đệm, quyền, cài đặt phiên không đúng
Làm cách nào để sửa lỗi Laravel hết hạn phiên 419?
Các kỹ sư hỗ trợ của chúng tôi có chuyên môn hơn một thập kỷ về Quản trị máy chủ sửa lỗi Laravel. Hãy xem những nguyên nhân phổ biến và cách chúng tôi khắc phục nó
1. Lỗi xác minh mã thông báo CSRF
Lý do phổ biến nhất cho lỗi 419 là lỗi mã thông báo CSRF. Mã thông báo giả mạo yêu cầu trên nhiều trang web là một giá trị được mã hóa, duy nhất do máy chủ tạo ra
Laravel tạo mã thông báo CSRF cho mỗi phiên người dùng. Mã thông báo xác minh người dùng bằng cách yêu cầu ứng dụng
Vì vậy, hãy luôn bao gồm mã thông báo CSRF trong biểu mẫu HTML để xác thực yêu cầu của người dùng
Phần mềm trung gian VerifyCsrfToken tự động kiểm tra mã thông báo trong yêu cầu đối với mã thông báo được lưu trữ trong phiên
Ngoài xác minh mã thông báo CSRF, phần mềm trung gian VerifyCsrfToken cũng kiểm tra tiêu đề yêu cầu X-CSRF-TOKEN
Vì vậy, chúng tôi lưu trữ mã thông báo trong thẻ meta HTML. Sau đó, một thư viện như jQuery có thể tự động thêm mã thông báo vào tất cả các tiêu đề yêu cầu. Do đó, để khắc phục lỗi mã thông báo CSRF, chúng tôi kiểm tra mã thông báo trong ứng dụng
2. Lỗi phiên hết hạn do bộ đệm
Đôi khi, bộ đệm cũng có thể dẫn đến lỗi phiên hết hạn ở giao diện người dùng. Đây có thể là cả bộ đệm của máy chủ và bộ đệm của trình duyệt. Vì vậy, các Kỹ sư hỗ trợ của chúng tôi sẽ xóa bộ nhớ cache của máy chủ bằng cách sử dụng
php artisan cache:clear
Nếu cách này không khắc phục được lỗi, chúng tôi yêu cầu khách hàng xóa cache trình duyệt. Nhiều lần điều này sửa lỗi
3. Quyền truy cập tệp và thư mục Laravel
Tương tự, quyền đối với tệp hoặc thư mục không phù hợp cũng có thể dẫn đến lỗi. Thông thường, các máy chủ web cần có quyền ghi trên bộ lưu trữ và nhà cung cấp thư mục Laravel. Ngoài ra, lưu trữ phiên cần có quyền ghi. Vì vậy, Kỹ sư hỗ trợ của chúng tôi cấp quyền như,
chmod -R 755 storage
chmod -R 755 vendor
chmod -R 644 bootstrap/caches
Hầu hết, điều này sửa lỗi
4. Cài đặt phiên Laravel
Cuối cùng nhưng không kém phần quan trọng, cài đặt phiên cũng có thể gây ra lỗi 419. Ứng dụng/cấu hình/phiên. php là tệp cấu hình phiên. Chuyên gia của chúng tôi kiểm tra cài đặt phiên trong tệp này. Do đó chúng tôi sửa nếu có lỗi. Chúng tôi luôn kiểm tra một số thông số quan trọng – tên miền và bảo mật
________số 8_______Cách tiếp cận từng bước này sửa lỗi và làm cho Laravel hoạt động trở lại
[Bạn cần hỗ trợ sửa lỗi Laravel? . ]
Phần kết luận
Nói tóm lại, Laravel error 419 session expire xảy ra do nhiều nguyên nhân như lỗi CSRF token, sai cache, quyền, cài đặt session không đúng, v.v. Hôm nay, chúng tôi đã xem cách các Kỹ sư hỗ trợ của chúng tôi khắc phục lỗi này