php - 即使设置了 meta 中的 csrf_token,Laravel + ReactJS 页面也会过期
问题描述
我正在使用 Laravel 5.6 和 ReactJS 16.4.1 构建一个 Web 应用程序。
我在我的上面设置了 csrf_tokenmaster.blade.php
如下<head>
:
<meta name="csrf-token" content="{{csrf_token()}}">
然后在我的 reactJs 上,我像这样加载了我的注册组件:
export default class RegistrationForm extends Component {
render() {
return (
<React.Fragment>
<form method="post" action={this.props.actionUrl}>
<div className="form-group">
<label htmlFor="txtEmail">Email</label>
<input type="email" name="txtEmail" id="txtEmail" className="form-control" placeholder="Email" />
</div>
<div className="form-group">
<label htmlFor="exampleInputPassword1">Password</label>
<input type="password" name="txtPassword" id="txtPassword" className="form-control" placeholder="Password" />
</div>
<div className="text-right">
<button type="submit" name="btnRegister" id="btnRegister" className="btn btn-primary">Register</button>
</div>
</form>
</React.Fragment>
);
}
}
然后当我点击注册按钮时,我被重定向到一个The page has expired due to inactivity. Please refresh and try again.
页面。
我不确定为什么即使我已经有了 csrf-token 元数据,这种情况仍然会发生。
我已经尝试过了,但仍然无法正常工作。
但是当我删除VerifyCsrfToken
on 时Kernel.php
,它可以工作。
\App\Http\Modules\Common\Middleware\VerifyCsrfToken::class
删除这个类是否安全?虽然我仍然希望对为什么我不想在中间件上删除它进行 csrf 验证。
解决方案
我已经手动添加了一个隐藏字段{{csrf_token()}}
作为值,它现在可以工作了。似乎在 reactjs 上,除了元 csrf 令牌之外,还应该手动添加此字段。
推荐阅读
- flutter - Flutter GridView 子项的默认高度和宽度是如何计算的?
- cmd - 如何在命令提示符下安装和运行 brew.sh?
- javascript - 在事件处理程序中异步执行函数是否有意义?
- flutter - 使用 dart 将字符串格式化为具有 (123) 456-6789 模式的电话号码
- java - Maven:尽管 settings.xml 的存储库配置了 HTTPS,但无法检索插件描述符和对等点未通过身份验证的错误
- java - 如何格式化每个 java 异常以不为每一行编写记录器?
- iis - Window10 iis Simultaneous Download Problem
- sql - Only include employees currently working for company
- sql - 从 oracle 表中过滤无效 id
- qt - QML repeater item highlight handling