代码之家  ›  专栏  ›  技术社区  ›  pramesh

如何在reactjs中生成csrf令牌并发送到play框架?

  •  3
  • pramesh  · 技术社区  · 6 年前

    我试图从react form发送一个post请求到play framework。它将引发以下错误:

    Caused by: java.lang.RuntimeException: No CSRF token was generated for this request! Is the CSRF filter installed?
    

    在使用播放模板时,csrf令牌是从模板本身处理的。因为我试图使用react作为前端,所以不能使用play模板。有谁能指导我在react中生成csrf令牌并将其传递给play吗?

    提前谢谢

    1 回复  |  直到 6 年前
        1
  •  2
  •   Andy Hayden    6 年前

    看起来您可以设置一个操作来生成csrf令牌(请参见 docs ):

    如果不使用csrf过滤器,还应该注入csrfaddtoken和csrf check操作包装器,以强制对特定操作添加令牌或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")
      })
    }
    

    把这个传给反应表:

    <input type="hidden" name="csrfToken" value="1234567890abcdef"/>
    

    (或者直接添加到post请求中。)