如何在Reactjs中生成CSRF令牌并发送到Play框架?

2024-03-25

我试图从反应表单发送发布请求到播放框架。它抛出以下错误:

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 令牌(请参阅docs https://www.playframework.com/documentation/2.6.x/ScalaCsrf#Getting-the-current-token):

如果您不使用 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 请求中。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Reactjs中生成CSRF令牌并发送到Play框架? 的相关文章

随机推荐