AJAX post resulteert in 403

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Koeniepoenie
  • Registratie: Oktober 2003
  • Laatst online: 07-09 09:17
Hallo,

Een beetje lastig om dit topic in het juiste forum te plaatsen, omdat het meer een combi is van client-side en server-side code.

Ik heb namelijk een website draaien op 't Kohana Framework en wil mbv jQuery een AJAX-post call doen naar een controller. Dit om een formulier op de achtergrond te submitten.

Allereerst mijn controller:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public function action_feedback() {

    $response = array();

    if(isset($_POST['giveFeedback'])) {
        // do something
        $response['success'] = 1;
    }
    else {
        $response['success'] = 0;
    }

    if($this->request->is_ajax()) {
        $this->outputJSON();
        $this->response->body(json_encode($response));
    }
}


So far so good, ik roep deze controller via jQuery:
JavaScript:
1
2
3
4
5
6
7
8
9
$('#feedback-form form').submit(function(e) {
    e.preventDefault();
    
    $.post($(this).attr('action'), $(this).serialize(), function(data) {
        console.log('feedback result');
    }, 'json');

    return false;
});


Wanneer ik dan het formulier submit, resulteert de AJAX-call in een 403 die ik terugkrijg van de server. Het rare is echter dat wanneer ik een GET-request doe middels $.getJSON() bijvoorbeeld, het allemaal prima verloopt. Dus de paden staan goed, alles loopt prima (ook de POST variabelen worden gevuld), maar blijkbaar vind de server mijn POST-request stom.

Hebben jullie enig idee waar dit aan kan liggen?

Parse error: syntax error, unexpected GOT_USER in https://gathering.tweakers.net on line 1337


Acties:
  • 0 Henk 'm!

Verwijderd

Wat heb je zelf al geprobeerd? Het eerste wat ik tegenkom als ik "Kohana 403 Ajax" Google is het volgende: http://forum.kohanaframew...o3-403-error-with-ajax/p1, misschien dat je daar iets mee bent?

Acties:
  • 0 Henk 'm!

  • Koeniepoenie
  • Registratie: Oktober 2003
  • Laatst online: 07-09 09:17
Verwijderd schreef op dinsdag 26 juni 2012 @ 02:46:
Wat heb je zelf al geprobeerd? Het eerste wat ik tegenkom als ik "Kohana 403 Ajax" Google is het volgende: http://forum.kohanaframew...o3-403-error-with-ajax/p1, misschien dat je daar iets mee bent?
Nou, uiteraard Google al uitgeplozen en ben deze post ook tegen gekomen. Het lijkt op exact hetzelfde probleem, maar het feit dat hij een 403 krijgt ligt aan het aanroep van zijn AJAX-call. Hij probeert de controller direct te benaderen wat niet de bedoeling is. Bij mij kan dit niet het probleem zijn aangezien een GET-request op dezelfde URL prima werkt.

Ik heb er overigens nu maar even omheen gewerkt door een GET-request te doen en daarbij ipv POST maar GET variabelen te vullen, maar het blijft gek natuurlijk.

Parse error: syntax error, unexpected GOT_USER in https://gathering.tweakers.net on line 1337


Acties:
  • 0 Henk 'm!

  • IceM
  • Registratie: Juni 2003
  • Laatst online: 11-09 20:35
Ik weet niet exact hoe kohana werkt, maar in veel frameworks wordt in je routedefinitie aangegeven welke request typen toegestaan worden (get, post, delete, put). 403 staat voor access denied, het zou dus zoiets kunnen zijn.

...


Acties:
  • 0 Henk 'm!

  • C0rnelis
  • Registratie: Juni 2010
  • Laatst online: 26-08 22:21
IceM schreef op dinsdag 26 juni 2012 @ 19:40:
Ik weet niet exact hoe kohana werkt, maar in veel frameworks wordt in je routedefinitie aangegeven welke request typen toegestaan worden (get, post, delete, put). 403 staat voor access denied, het zou dus zoiets kunnen zijn.
Als aanvulling hierop, er zijn ook frameworks die Cross-Site Request Forgery proberen tegen te gaan door formulieren een extra veld mee te laten sturen, een zogeheten CSRF-token. Ik weet niet of je dit bijvoorbeeld bij andere non-AJAX formulieren (met de POST method) al doet zoals aangegeven in kohana's documentatie, maar een AJAX call mist dit CSRF token natuurlijk, waardoor een framework bijvoorbeeld ook een 403 Forbidden terug kan geven.
Ik weet niet hoe Kohana CSRF tegen gaat, maar misschien dat je met javascript een token uit je sessie/cookie kunt lezen en toevoegen als POST data bij de $.post aanroep (ik weet toevallig dat het framework Django dit wel op deze manier aanpakt).