首页 > 解决方案 > 即使设置了 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 元数据,这种情况仍然会发生。

我已经尝试过,但仍然无法正常工作。

但是当我删除VerifyCsrfTokenon 时Kernel.php,它可以工作。 \App\Http\Modules\Common\Middleware\VerifyCsrfToken::class

删除这个类是否安全?虽然我仍然希望对为什么我不想在中间件上删除它进行 csrf 验证。

标签: phplaravelreactjscsrf

解决方案


我已经手动添加了一个隐藏字段{{csrf_token()}}作为值,它现在可以工作了。似乎在 reactjs 上,除了元 csrf 令牌之外,还应该手动添加此字段。


推荐阅读