我试图从反应表单发送发布请求到播放框架。它抛出以下错误:
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(使用前将#替换为@)