Laravel catch TokenMismatchException
2022-08-30 10:03:13
可以使用尝试捕获块捕获令牌不匹配异常吗?我希望它显示实际页面并仅显示错误消息,而不是显示“VerifyCsrfToken中的TokenMismatchException.php行46...”,而是显示实际页面。
我对CSRF没有问题,我只是希望它仍然显示页面而不是调试页面。
要复制(使用火狐浏览器):步骤:
- 打开页面 (http://example.com/login)
- 清除 Cookie(域、路径、会话)。我在这里使用Web开发人员工具栏插件。
- 提交表单。
实际结果:显示“哎呀,看起来好像出了点问题”页面显示。预期结果:仍然显示登录页面,然后传递“令牌不匹配”或其他错误。
请注意,当我清除 Cookie 时,我没有刷新页面以使令牌生成新密钥并强制其出错。
更新(添加表单):
<form class="form-horizontal" action="<?php echo route($formActionStoreUrl); ?>" method="post">
<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>" />
<div class="form-group">
<label for="txtCode" class="col-sm-1 control-label">Code</label>
<div class="col-sm-11">
<input type="text" name="txtCode" id="txtCode" class="form-control" placeholder="Code" />
</div>
</div>
<div class="form-group">
<label for="txtDesc" class="col-sm-1 control-label">Description</label>
<div class="col-sm-11">
<input type="text" name="txtDesc" id="txtDesc" class="form-control" placeholder="Description" />
</div>
</div>
<div class="form-group">
<label for="cbxInactive" class="col-sm-1 control-label">Inactive</label>
<div class="col-sm-11">
<div class="checkbox">
<label>
<input type="checkbox" name="cbxInactive" id="cbxInactive" value="inactive" />
<span class="check"></span>
</label>
</div>
</div>
</div>
<div class="form-group">
<div class="col-sm-12">
<button type="submit" class="btn btn-primary pull-right"><i class="fa fa-save fa-lg"></i> Save</button>
</div>
</div>
</form>
这里没什么好计较的。只是一个普通的形式。就像我说的,表格工作得很好。只是当我陈述上述步骤时,由于令牌过期,它出错了。我的问题是,表单应该以这种方式表现吗?我的意思是,当我清除cookie和会话时,我也需要重新加载页面?这就是CSRF在这里的工作方式吗?