Übergabe des CSRF-Tokens an REACT / FLUX vom Knoten

8

Ich verwende nodejs und gebe normalerweise csrf-Token wie folgt weiter:

util.js

%Vor%

app.js

%Vor%

und dann auf der ejs Seite würde ich

machen %Vor%

Aber jetzt benutze ich flux / react für mein Frontend und muss ein csrf-Token für eine Formularübergabe übergeben und nicht sicher, wie das geht. Es gab eine ähnliche Antwort hier mit Jade:

How CSRF-Schutz in Ajax-Aufrufen mithilfe von express.js implementieren (Suchen nach einem vollständigen Beispiel)?

Allerdings benutze ich ejs (mit jsx) (oder nur html) und möchte nicht jade

verwenden     
Saad 11.03.2015, 20:06
quelle

2 Antworten

7

Ich habe herausgefunden, dass der beste Weg, dies in React zu tun, darin besteht, das csrf -Token zu einem Geschäft hinzuzufügen oder es an den Komponentenkontext zu übergeben.

Sie können sehen, wie es funktioniert, indem Sie den Yahoo Fluxible-React-Router etwas verändern Beispiel .

%Vor%

Dies führt eine Flussaktion mit dem Token csrf als Parameter aus. Die Yahoo Flux-Architektur serialisiert die Werte des Geschäfts über:

an den Client

var exposed = 'window.App=' + serialize(app.dehydrate(context)) + ';';

Dies wird in einem Skript-Tag auf die Seite geschrieben, auf den dann im clientseitigen Javascript zugegriffen werden kann. Es sieht ungefähr so ​​aus:

%Vor%

Hier ist die Html.jsx-Komponente im Flux-Beispiel .

Wenn Sie keine isomorphe Anwendung erstellen (die React-Komponenten werden sowohl auf dem Server als auch auf dem Client ausgeführt), würde ich vorschlagen, einfach ein Skript-Tag mit dem csrf -Token auszugeben.

Bei Fluxible ist dieser Wert dann auf dem Client rehydriert .

%Vor%

Sie erhalten einen befüllten Speicher auf dem Client ohne eine zusätzliche HTTP-Anforderung . Sie können dann von überall auf das csrf -Token zugreifen, indem Sie auf den Speicher zugreifen.

Sie können es über den Kontext übergeben, indem Sie Folgendes tun:

%Vor%

Sie können dann über die Props der Komponente darauf zugreifen.

this.props.context.csrf

Wenn du Fluxible verwendest und es über den Kontext weitergeben möchtest, würde ich es vielleicht in einem Plugin machen, aber du kommst auf die Idee.

Vollständiger Servercode:

%Vor%     
Joe McBride 16.03.2015 03:40
quelle
-3

Etwas durch die Vorlage in React zu geben ist ein wenig fummelig. Es ist möglicherweise besser, einfach einen Ajax-Aufruf für das CSRF-Token einzurichten.

Dieser Link erläutert, wie man es mit Django und jQuery macht, aber die Konzepte sollten schön tragbar sein.

    
Joel Auterson 15.03.2015 18:08
quelle

Tags und Links