【问题标题】:CSRF Protection in Phoenix and AngularPhoenix 和 Angular 中的 CSRF 保护
【发布时间】:2017-10-29 19:43:32
【问题描述】:

我有一个 Angular 应用程序,我打算使用 Phoenix 作为后端。 Phoenix 默认支持 CSRF 保护,其中 CSRF 令牌存储到会话中。当 Phoenix 渲染视图时这工作正常,但是当我的前端是使用 Angular js 构建时我如何访问 CSRF 令牌。目前,我正在向 get_csrf_token() menthod 发出获取请求,但我正在寻找更好的解决方案。

csrf_token = get_csrf_token()

注意:您也可以推荐任何其他支持 CSRF 保护的 elixir 框架。

【问题讨论】:

    标签: angularjs elixir phoenix-framework csrf-protection plug


    【解决方案1】:

    您可以在应用布局中将 CSRF 令牌存储在带有 csrf_meta_tag/0 的元标记中,然后从 Angular 读取它并将其设置为 $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;
    }])
    

    【讨论】:

    • 因为我通过 Angular 提供视图,所以我在 phoenix 中没有布局。那我应该在哪里调用 csrf_meta_tag 呢?注意:我在 mix phoenix.new 中使用 --no-html 标签安装项目
    • 那么由您来决定与服务器通信以接收 csrf 令牌的方法,例如使用单独的 REST 端点来获取 csrf_token。对于遇到非常相似问题的人,也可以查看此问题:stackoverflow.com/questions/33179747/…
    猜你喜欢
    • 2014-07-07
    • 2019-02-03
    • 2019-11-29
    • 2015-04-20
    • 2017-05-04
    • 2010-12-22
    • 1970-01-01
    • 2012-06-28
    • 2017-03-26
    相关资源
    最近更新 更多