Güncelleme
(teşekkürler ve üzgün kötü İngiliz, ben yerli değilim): gibi haui onun yorumunda şunları söyledi: onlar oyun versiyonu 2.6 benzer bir şey katma gibi
görünüyor. . Orada FakeRequest() withCSRFToken (Scala) ve 2.5.6 hala insanlar için Migration guide
açıklandığı gibi CSRFTokenHelper.addCSRFToken (requestBuilder) (Java), cevabım hala geçerli kullanabilirsiniz:
,
https://stackoverflow.com/a/19849420/4496364 hatta bir özelliği yapılmış 2.5.6
Play, yani eğer birisi bir gün gerekir:
Yani, belirli bir süre için Play-scala sınıflarında baktıktan sonra, sonunda bu cevabı adapte etmenin bir yolunu buldum işte burada:
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))
}
}
Kullanmak için
, sadece bu gibi onunla test sınıfını genişletmek:
class LoginSpec extends PlaySpec with OneAppPerSuite /* or whatever OneApp */ with CSRFTest
sonra yerine
val fakeRequest = FakeRequest(/* params */)
çağıran basitçe ben yapmaya çalıştı
val fakeRequest = addToken(FakeRequest(/* params */))
çağrı Denetleyicideki addToken {} 'e benziyor :)
Siz uygulamayı geçersiz kılabilirsiniz. tion.conf' ve CSRF'yi atlamak için bazı başlıklar koydu, örneğin [https://www.playframework.com/documentation/2.5.x/ScalaCsrf#Plays-CSRF-protection]. Ya da [bu] (http://stackoverflow.com/a/19849420/4496364) cevabına bakın. –
Merhaba, cevap verdiğiniz için teşekkürler! Ayrıca şablonları test ettiğimi ve her eylem bazında CSRF koruması yaptığımı da belirtmeliyim (dokümandaki ikinci örnek, filtreli ilk değil). Bu nedenle, şablonumun bir CSRF belirtecine sahip olması gerektiğinden, CSRF'yi atlayamam, ikinci testte olduğu gibi, daha önce test etmiş olduğum gibi (bu da kusuru düzeltmiş olmalıyım), ama oyun için 2.2. .1 ve Intellij bana bağırıyor "Sembolü çözemiyorsunuz SignedTokenProvider" Oyun 2.5'da bunu nasıl yapabilirim? – Argurth
Bir çözüm buldum ve bir özellik yaptı :) İlgilendiğiniz yanıtın sonuna baktım ^^ – Argurth