newAction und createAction mit Ajax -> Request hash (HMAC) checking failed [Gelöst]

  • tobla tobla
    R2-D2
    0 x
    100 Beiträge
    1 Hilfreiche Beiträge
    07. 11. 2011, 15:25

    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.

    1. /* 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... */
    2. [code language=JavaScript]
    3.  
    4. $(document).ready(function () {
    5. $('#tx-myExt-form-new').bind('submit', function() {
    6. var form = $('#tx-myExt-form-new');
    7. var category = $('#dataCategory').attr('data');
    8. var data = 'tx_myExt_ajax[controller]=Entry&tx_myExt_ajax[action]=create&type=191919&tx_myExt_ajax[category]='+category+'&'+form.serialize();
    9. data = data.replace(/%5B/g, '[').replace(/%5D/g, ']').replace(/%22/g, '"').replace(/%3B/g, ';').replace(/%3A/g, ':').replace(/%7B/g, '{').replace(/%7D/g, '}');
    10. console.log("Ajax data: "+data);
    11. $.ajax({
    12. type: 'POST',
    13. dataType: 'html',
    14. success: function(response){
    15. $('#tx-myExt-overlay-content').html(response);
    16. },
    17. error: function(request,error){
    18. $('#tx-myExt-overlay-content').html("<h3>Error</h3><p>Please visite to the console log.");
    19. }
    20. });
    21. return false;
    22. });
    23. });

    [/code]
    Die Seite wird soweit aufgerufen, die Action ausgeführt.

    [b]Das Problem[/b] 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?


  • 1
  • freshman17 freshman1...
    Sternenflotten-Admiral
    0 x
    218 Beiträge
    2 Hilfreiche Beiträge
    07. 11. 2011, 16:19

    Versuche es mal so:

    1. <f:form id="tx-myExt-form-new" action="foo" controller="Bar" method="post" additionalAttributes="{type: '191919'}">
    1. $(document).ready(function () {
    2. $('#tx-myExt-form-new').bind('submit', function() {
    3. var form = $(this);
    4. jQuery.ajax({
    5. type: 'post',
    6. url: $(form).attr('action')+'&type='+$(form).attr('type'),
    7. data: $(form).serialize(),
    8. success: function(response){
    9. $('#tx-myExt-overlay-content').html(response);
    10. },
    11. error: function(request,error){
    12. $('#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" />;
    13. }
    14. });
    15. return false;
    16. });
    17. });

  • tobla tobla
    R2-D2
    0 x
    100 Beiträge
    1 Hilfreiche Beiträge
    10. 11. 2011, 17:59

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

    [b]Für andere mit dem gleichen Problem die Kurzfassung:[/b]
    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:

    1. 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 jank
    Sternenflotten-Admiral
    0 x
    158 Beiträge
    0 Hilfreiche Beiträge
    11. 11. 2011, 09:50

    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 RockyWolv...
    TYPO3-Anwärter
    0 x
    6 Beiträge
    0 Hilfreiche Beiträge
    11. 11. 2011, 10:43

    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 jank
    Sternenflotten-Admiral
    0 x
    158 Beiträge
    0 Hilfreiche Beiträge
    11. 11. 2011, 10:59

    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 cbalogh
    Typ im Roten Hemd
    0 x
    3 Beiträge
    0 Hilfreiche Beiträge
    22. 11. 2011, 08:03

    [quote="tobla"]
    Vielen Dank. Durch deine Anregung hab ich das Problem lösen können.

    [b]Für andere mit dem gleichen Problem die Kurzfassung:[/b]
    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
    [/quote]

    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 tobla
    R2-D2
    0 x
    100 Beiträge
    1 Hilfreiche Beiträge
    23. 11. 2011, 10:54

    [quote="freshman17"]
    Versuche es mal so:

    1. <f:form id="tx-myExt-form-new" action="foo" controller="Bar" method="post" additionalAttributes="{type: '191919'}">

    1. ...
    2. jQuery.ajax({
    3. type: 'post',
    4. url: $(form).attr('action')+'&type='+$(form).attr('type'),
    5. data: $(form).serialize(),
    6. ...
    7. });
    8. ...

    [/quote]

  • 1