2017-05-29 1 views
0

私はバックエンドとしてフェニックスを使用するアングルアプリを持っています。 Phoenixは、CSRFトークンがセッションに格納されている場合、デフォルトでCSRF保護をサポートしています。 Phoenixがビューをレンダリングしているときにはうまく動作しますが、フロントエンドがAngular jを使用して構築されている場合、どのようにCSRFトークンにアクセスできますか。現在、私はget_csrf_token()menthodへのリクエストを作成していますが、より良い解決策を探しています。CSRFフェニックスとアングルの保護

csrf_token = get_csrf_token()

注:あまりにもCSRF保護をサポートする任意の他のエリクシルのフレームワークを提案することができます。

答えて

3

あなたが角度からそれを読んで、$httpProviderのデフォルトヘッダーとして設定し、その後、あなたのアプリのレイアウトにcsrf_meta_tag/0とメタタグにCSRFトークンを保存することができます:私は、私は角度によって景色を提供しておりますので

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

フェニックスのレイアウトはありません。どこでcsrf_meta_tagを呼び出すべきですか? 注:--no-htmlタグをmix in phoenix.newで使用してプロジェクトをインストールします。 –

+0

サーバーと通信してcsrfトークンを受信する方法を理解する必要があります。たとえば、別のRESTエンドポイントcsrf_tokenを入手してください。 と非常によく似た問題を抱えている人にもこの質問を見てください:https://stackoverflow.com/questions/33179747/springs-csrf-protection-for-a-html-only-login-page –