Laravel程序提示:CSRF Token Mismatch.错误是因为默认启用 CSRF 保护,解决办法有两种:
方法一:从 CSRF 保护中排除 URI
有时你可能希望从 CSRF 保护中排除一组 URI。比如接入支付宝或者微信支付后接受回调信息的 URI ,因为支付宝或微信不会要向您的路由发送 CSRF 令牌。
通常,你应该将这些类型的路由放在 AppProvidersRouteServiceProvider
应用于 routes/web.php 文件中的所有路由的 web
中间件组之外。但是,你现在也可以通过将路由的 URI 添加到 VerifyCsrfToken
中间件的 $except
属性来排除路由:
<?php
namespace AppHttpMiddleware;
use IlluminateFoundationHttpMiddlewareVerifyCsrfToken as Middleware;
class VerifyCsrfToken extends Middleware
{
/**
* 从 CSRF 验证中排除的 URI。
*
* @var array
*/
protected $except = [
'alipay/notify',
'https://www.codesou.cn/wechat/notify',
];
}
方法二、在表单或者ajax请求中添加 CSRF 令牌
表单代码示例:
<form method="POST" action="https://www.codesou.cn/profile">
@csrf
<!-- 或者(标红的代码功能相同,选择任意一种即可) -->
<input type="hidden" name="_token" value="{{ csrf_token() }}" />
</form>
ajax 请求示例:
首先将令牌存储在 HTML 的 meta
标签中:
<meta name="csrf-token" content="{{ csrf_token() }}">
然后,就可以指示 jQuery 之类的库自动将令牌添加到所有请求标头。这为使用传统 JavaScript 技术的基于 AJAX 的应用程序提供了简单、方便的 CSRF 保护:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
总结
通常情况下,建议使用方法二来解决 CSRF Token Mismatch. 问题,这样一般会更安全。只有在特定的需求下并且我们会对请求参数进行严格的校验时才使用方法一。
想要了解更多内容,请持续关注码农资源网,一起探索发现编程世界的无限可能!
本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
如有侵权请发送邮件至1943759704@qq.com删除
码农资源网 » Laravel提示:CSRF Token Mismatch.的解决办法
本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
如有侵权请发送邮件至1943759704@qq.com删除
码农资源网 » Laravel提示:CSRF Token Mismatch.的解决办法