30/09/2018, 21:14
[PHP - Laravel 5] Thắc mắc về Token
Chào mọi người, mấy nay không biết sao website của mình sau khi gởi form lên Server hay bị báo TokenMismatchException. Mình đã gắn token vào mỗi form rồi. Và nó hay bị lỗi với mấy form gởi bằng method POST.
<form action="example.com" method="post">
<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
<!-- TODO -->
</form>
Tại một form đó, có lúc mới vừa load trang xong là submit liền thì chạy bình thường. Lúc vừa load xong, submit là bị dính TokenMismatch liền. Mong mọi người giúp đỡ.
Bài liên quan
Mình nghĩ do lúc load trang và lúc submit là 2 request khác nhau nên mới TokenMismatch
Mình đã kiểm tra Token của trang và Token của form. Nó đều giống như nhau cả.
các routes đã cùng middleware => web chưa ạ? (Laravel 5.2 trở lên)
hôm bữa cũng mò mãi, sau mới nhìn lại nó nằm ngoài middleware web
Bạn có thể nói rõ hơn hoặc cho mình xin đường link tới vấn đề đó được không?
Sai rồi, từ laravel 5.2 trở đi mọi router mặc định sẽ chuyển sang web trừ các router API.
Anh đang dùng Laravel phiên bản bao nhiêu nếu dưới 5.2 thì vào
app\Http\routes.php
chỉnh các Router middleware về web:hoặc sử dụng
Router::group
Hoặc dùng thử chuyển cái form token xem nếu ở Laravel 5.2:
thành
Lý do sai là ở đây, trong
RouterServiceProvider
của phiên bản 5.2 trở lên có đoạn này đã mặc định middlware web cho tất cả Router:trước mình làm thì đã là bản 5.2 rồi. và mình cũng bị lỗi thế kia và lỗi Session nữa nếu không cho mấy router vào middleware web.
mặc định hay không mình không rõ nhưng mình phải thêm vào nó mới chạy được TT_TT
tớ ko biết bạn có nhầm không nhưng changelog version 5.2 là thế
À chắc bạn dùng 5.2.0 rồi, cái này là bản fix từ 5.2.x trở đi mới có
đúng r, lúc mình mới học là 5.2.0.
Thử view-source xem thằng này có giá trị không
csrf_token();
Chào mấy bác, nào giờ em xuất thì token nó ở những chỗ khai như phía dưới đều ra token trùng với trên thẻ <meta> của em.
Em có sử dụng cách của @dqh đề nghị là dùng
thay cho
Kết quả là em thấy 2 thằng này xuất ra đều như nhau. Nhưng hiện tại là chưa thấy em nó báo lỗi TokenMismatch nữa. Không biết sắp tới nó có báo hay không?
Em đang sử dụng Laravel 5.2.29.
Nếu bạn nào biết chỗ nào chỉnh lại timeout của Token thì cho mình biết với nhé. Tại thấy có chỗ khai báo 2 giờ nhưng mình treo khoảng 5 phút là bị dính TokenMismatchException.
Nếu đã có token mà vẫn lỗi thì hơi lạ, anh dùng nó như thế nào nếu dùng dạng API AJAX là khác nữa nha anh.
Anh đang ở đường dẫn GET: /create. Sau đó, gởi một file Excel tới đường dẫn POST: /create để nhập sản phẩm bằng file Excel đó .
Không biết làm như vậy nó có bị lỗi không?
Form anh có để dạng
method="post" enctype="multipart/form-data"
. Lỗi này thường thì sẽ ko có xảy ra trừ khi session của php có vấn đề,Anh sử dụng Cookie để lưu thông tin khi đăng nhập. Giả sử như em nói session của PHP có vấn đề. Anh nghĩ trường hợp xảy ra là trong khoảng thời gian ngắn (chưa tới 120 phút) thằng Session nó tự động đổi Token.
Ở file /config/session.php anh vẫn để cấu hình mặc định.
em mới thử build laravel 5.2 lại và cũng ko gặp lỗi như trên lỗi nằm ở đâu ta ???
Chắc anh bắt TokenMismatchException lại. Mỗi lần nó văng exception thì anh xài return redirect()->back() quá
Dù lỗi nhưng vẫn phải đảm bảo không ảnh hưởng tới quy trình nghiệp vụ của người ta, có thể họ chịu khó up lại lần nữa (chọn 1 file và điền 2 textbox). Anh nghĩ vậy.
Anh dùng environment từ XAMPP hay Homestead ?
Ở local là VertrigoServ, ở host chạy Debian. Anh chỉ biết nhiêu đây thông tin à