2017-05-29 2 views
0

J'ai une application angulaire pour laquelle j'ai l'intention d'utiliser Phoenix comme backend. Phoenix prend en charge la protection CSRF par défaut lorsque le jeton CSRF est stocké en session. Cela fonctionne bien lorsque Phoenix affiche des vues, mais comment puis-je avoir accès au jeton CSRF lorsque mon frontal est construit à l'aide d'Angular js. Actuellement, je fais une demande get à get_csrf_token() menthod mais je cherche une meilleure solution.Protection CSRF dans Phoenix et Angular

csrf_token = get_csrf_token()

REMARQUE: Vous pouvez suggérer tout autre cadre élixir qui prend en charge la protection CSRF aussi.

Répondre

3

Vous pouvez stocker le CSRF jeton dans une balise meta csrf_meta_tag/0 en vous la mise en page application, puis le lire à partir angulaire et le définir comme en-tête par défaut pour $httpProvider:

angular.module('MyApplication', []).config(["$httpProvider", function ($httpProvider) { 
    var token = document.querySelector('meta[name=csrf-token]').content; 
    $httpProvider.defaults.headers.common['X-CSRF-Token'] = token; 
}]) 
+0

que je ne suis au service vue par angulaire, je ne pas avoir la disposition à Phoenix. Où dois-je appeler csrf_meta_tag alors? Note: J'installe un projet en utilisant la balise --no-html dans le mix phoenix.new –

+0

Eh bien, c'est à vous alors de trouver un moyen de communiquer avec le serveur pour recevoir le jeton csrf, par exemple avec un point de terminaison REST séparé pour obtenir un csrf_token. Voir aussi cette question pour quelqu'un qui avait un problème très similaire: https://stackoverflow.com/questions/33179747/springs-csrf-protection-for-a-html-only-login-page –