reactjs - 如何在 Reactjs 中生成 CSRF 令牌并发送到 Play Framework?
问题描述
我试图从反应表单发送一个发布请求到播放框架。它抛出以下错误:
Caused by: java.lang.RuntimeException: No CSRF token was generated for this request! Is the CSRF filter installed?
在使用 Play 模板时,CSRF 令牌是从模板本身处理的。由于我正在尝试将 React 用于前端,因此我无法使用 Play 模板。谁能指导我在 React 中生成 CSRF 令牌并将其传递给 Play?
提前致谢
解决方案
看起来您可以设置一个操作来生成 CSRF 令牌(请参阅文档):
如果您没有使用 CSRF 过滤器,您还应该注入 CSRFAddToken 和 CSRFCheck 操作包装器以强制添加令牌或对特定操作进行 CSRF 检查。否则令牌将不可用。
import play.api.mvc._
import play.api.mvc.Results._
import play.filters.csrf._
import play.filters.csrf.CSRF.Token
class CSRFController(components: ControllerComponents, addToken: CSRFAddToken, checkToken: CSRFCheck) extends AbstractController(components) {
def getToken = addToken(Action { implicit request =>
val Token(name, value) = CSRF.getToken.get
Ok(s"$name=$value")
})
}
获取这个并将其传递给 React 表单:
<input type="hidden" name="csrfToken" value="1234567890abcdef"/>
(或直接将其添加到 POST 请求中。)
推荐阅读
- javascript - 对每次随机生成的数组进行冒泡排序
- powershell - 根据用户输入从 CSV 文件中为 WinSCP .NET 程序集选择 SFTP 连接数据
- node.js - 在 Redis 中处理并发请求
- hyperledger-fabric - 频道创建失败。密钥组频道申请问题
- java - 使用 Do-while 循环创建三角乘法表
- javascript - NodeJS - 在数组中的每个元素之间按顺序循环遍历数组
- javascript - Vue如何将prop数据分配给arraylist
- ocaml - 如果字符列表中存在字符,OCaml 计数:语法错误
- android - 不知道 NullPoniter 的确切问题
- node.js - 为什么我的 socket.io 服务器会为客户端分配新的套接字 ID 或丢失现有套接字 ID?