업데이트를
는 (감사합니다, 미안 나쁜 영어, 나는 네이티브 아니에요) : 마찬가지로 깃발을 올려 그의 주석에서 말했다 : 그들은 플레이 버전 2.6에서 비슷한 추가처럼
이 보인다. . 거기 당신은 FakeRequest() withCSRFToken (스칼라) 및 2.5.6에서 여전히 사람들을위한 Migration guide
에 설명 된대로 CSRFTokenHelper.addCSRFToken (requestBuilder) (자바), 내 대답은 여전히 적용 사용할 수 있습니다
,
https://stackoverflow.com/a/19849420/4496364 나는 심지어 특성을 만들어 2.5.6
플레이, 그렇다면 누군가가 언젠가 필요합니다
그래서, 일정 시간 동안 플레이 - 스칼라 클래스에보고 후, 나는 마침내이 대답을 적용하는 방법을 발견 여기에 :
import play.api.Application
import play.api.test.FakeRequest
import play.filters.csrf.CSRF.Token
import play.filters.csrf.{CSRFConfigProvider, CSRFFilter}
import scala.language.postfixOps
trait CSRFTest {
def addToken[T](fakeRequest: FakeRequest[T])(implicit app: Application) = {
val csrfConfig = app.injector.instanceOf[CSRFConfigProvider].get
val csrfFilter = app.injector.instanceOf[CSRFFilter]
val token = csrfFilter.tokenProvider.generateToken
fakeRequest.copyFakeRequest(tags = fakeRequest.tags ++ Map(
Token.NameRequestTag -> csrfConfig.tokenName,
Token.RequestTag -> token
)).withHeaders((csrfConfig.headerName, token))
}
}
그것을 사용하려면 53,691,363,210
, 단순히 같이, 그것으로 테스트 클래스를 확장 :
class LoginSpec extends PlaySpec with OneAppPerSuite /* or whatever OneApp */ with CSRFTest
을 한 후, 대신
val fakeRequest = FakeRequest(/* params */)
를 호출 단순히 내가 만들려고
val fakeRequest = addToken(FakeRequest(/* params */))
전화 그것은 컨트롤러에서 addToken {}처럼 보입니다.
당신은 당신을 덮어 쓸 수 있습니다. 여기에 [https://www.playframework.com/documentation/2.5.x/ScalaCsrf#Plays-CSRF-protection]과 같이 CSRF를 우회 할 헤더를 설정하십시오. 또는 [이] (http://stackoverflow.com/a/19849420/4496364) 대답을보십시오. –
안녕하세요, 저에게 답변 해 주셔서 감사합니다! 필자도 템플릿을 테스트하고 있으며 액션 단위로 CSRF 보호를 수행하고 있음을 입증해야합니다 (문서의 두 번째 사례, 필터가있는 첫 번째 사례는 아닙니다). 이 때문에 필자는 이미 CSRF를 우회 할 수는 없다. 필자가 이미 테스트 한 두 번째 링크처럼 CSRF 토큰이 FakeRequest에 있어야하기 때문이다. (너무 미안하다.) .1, Intellij가 나에게 소리 쳤다 "SignedTokenProvider 심볼을 해결할 수 없음" 연극 2.5에서 어떻게 할 수 있을지 생각해 보셨습니까? – Argurth
해결책을 찾고 특성을 만들었습니다 :) 대답을보세요. 관심이 있으시다면 ^^ – Argurth