Zum Inhalt springen

newAction und createAction mit Ajax -> Request hash (HMAC) checking failed

Erstellt am 7. November 2011 · 7 Antworten · letzte Antwort am 23. November 2011

Tags: Frage

tobla ·

Hallo zusammen

Wie im Titel bereits erwähnt, bin ich dabei, ein bestehendes newAction -> createActon szenario für Ajax umzubauen. Das Szenario besteht und funktioniert mit Extbase / Fluid. Neue Einträge werden ins Repository gespeichert, bzw. Extbase wirf entsprechende Meldungen bei Validation Fehler.

Um das Szenario mit Ajax umzusetzen, hab ich einen speziellen Seitentyp mit dem entsprechend Plugin. Das laden dieser Seite (und einbinden per jQuery tools) per Ajax klappt soweit.

Nun schicke ich das Formular auch wieder per Ajax ab, um die create Action aufzurufen bzw. allfällige Fehlermeldungen zurück zu erhalten.

 /* Das Forum hat leider gerade eine Make mit Javascript Abschnitten, daher muss ich das Ganze mit einem TS Abschnitt wrappen, damit es lesbar ist. sorry... */
[code language=JavaScript]

$(document).ready(function () {  
    $('#tx-myExt-form-new').bind('submit', function() {  
        var form = $('#tx-myExt-form-new'); 
	var category = $('#dataCategory').attr('data');
        var data = 'tx_myExt_ajax[controller]=Entry&tx_myExt_ajax[action]=create&type=191919&tx_myExt_ajax[category]='+category+'&'+form.serialize();  
	data = data.replace(/%5B/g, '[').replace(/%5D/g, ']').replace(/%22/g, '"').replace(/%3B/g, ';').replace(/%3A/g, ':').replace(/%7B/g, '{').replace(/%7D/g, '}');
	console.log("Ajax data: "+data);
	$.ajax({
		type: 'POST',
	        dataType: 'html',
	        data: data,
	        success: function(response){     
	            $('#tx-myExt-overlay-content').html(response);
		},
		error: function(request,error){     
	            $('#tx-myExt-overlay-content').html("<h3>Error</h3><p>Please visite to the console log.");
		}
	});
        return false;  
    });  
});

[/code]

Die Seite wird soweit aufgerufen, die Action ausgeführt.

Das Problem ist nun, dass die Form Verification von Extbase/Fluid auf die Nase fällt und "Request hash (HMAC) checking failed. The parameter __hmac was invalid or not set, and objects were modified." Zurückgibt.

Hat jemand von euch Erfahrung mit Extbase/Ajax und kann mir hier weiterhelfen?

freshman17 ·

Versuche es mal so:

<f:form id="tx-myExt-form-new" action="foo" controller="Bar" method="post" additionalAttributes="{type: '191919'}">
$(document).ready(function () {  
    $('#tx-myExt-form-new').bind('submit', function() {
		var form = $(this);
		jQuery.ajax({
			type: 'post',
			url: $(form).attr('action')+'&type='+$(form).attr('type'),
			data: $(form).serialize(),
			success: function(response){
				$('#tx-myExt-overlay-content').html(response);
			},
			error: function(request,error){     
				$('#tx-myExt-overlay-content').html("<h3>Error</h3><p>Please visite to the console log.&quot<img src="typo3conf/ext/mm_forum//res/smilies/icon_wink.gif" alt="icon_wink.gif" />;
			}
		});
		return false;  
	}); 
});
tobla ·

Vielen Dank. Durch deine Anregung hab ich das Problem lösen können.

Für andere mit dem gleichen Problem die Kurzfassung:
Die Fehlermeldung hatte gar keinen Zusammenhang damit, dass ich das Formular mit Ajax abschickte.
Die HMAC Verification fiel auf die Nase, weil ich nebst den durch Extbase generierten Feldern noch einige weitere Mitgeschickt habe:

var data = 'tx_myExt_ajax[controller]=Entry&tx_myExt_ajax[action]=create&type=191919&tx_myExt_ajax[category]='+category+'&'+form.serialize();

Die Kategiorie hab ich nun als hidden Field ins Formular eingebettet und die andern Felder sind gar nicht nötig, da sie von Extbase bereits generiert werden. :-)

jank ·

ich versuche mich auch gerade daran, mein Formular für die newAction mit Ajax nachzuladen.
Jedoch wollte ich es per eID und nicht über einen seperaten PageType lösen.
Hat mir zufällig jemand einen Tip wie ich im eID script auf Fluid zugreifen kann?

RockyWolverine ·

Hallo Jank

Genau vor dem gleichen Problem standen wir (arbeite mit tobla zusammen) auch.

Ich habe probiert alles für Fluid Nötige manuell im EID-Script zu laden (cObj,Typoscript.etc), habe es aber nur teilweise hingekriegt. Dann habe ich es mit einem Pagetype versucht und gemerkt, dass die Latenzzeit mit EID sogar höher ist.

Ich glaube nicht (mehr), dass die Verwendung von EID bei Fluid performanter (der einzige Grund wieso ich es nicht über einen Pagetype lösen wollte) ist.
Denke beim Pagetype wird auch nicht viel mehr geladen als für Fluid nötig.

Gruss Marc

jank ·

OK in dem Fall macht eID bei extbase/fluid nur Sinn wenn Daten nachgeladen werden sollen und nicht ein komplettes Fluid Template...

Gut zu wissen. Danke Marc

cbalogh ·
tobla schrieb

Vielen Dank. Durch deine Anregung hab ich das Problem lösen können.

Für andere mit dem gleichen Problem die Kurzfassung:
Die Fehlermeldung hatte gar keinen Zusammenhang damit, dass ich das Formular mit Ajax abschickte.
Die HMAC Verification fiel auf die Nase, weil ich nebst den durch Extbase generierten Feldern noch einige weitere Mitgeschickt habe

Hallo alle miteinander und im speziellen tobka!

Ich habe zwar erfolgreich die Kommunikation über ajax aufgebaut, allerdings etwas brutal unter Einsatz von @dontverifyrequesthash. Damit das alles sauberer wird, versuche ich das alles umzustellen. Was sich mir leider aus den Postings nicht erschließt ist folgendes:

Wo und wie wird der type=4711 parameter untergebracht, damit die form action das auch schnallt?

Danke für EUre HInweise.

Liebe Grüße
Christoph

tobla ·
freshman17 schrieb

Versuche es mal so:

<f:form id="tx-myExt-form-new" action="foo" controller="Bar" method="post" additionalAttributes="{type: '191919'}">
...
jQuery.ajax({
	type: 'post',
	url: $(form).attr('action')+'&type='+$(form).attr('type'),
	data: $(form).serialize(),
	...
});
...