【问题标题】:Angular2 and Laravel CSRF protectionAngular2 和 Laravel CSRF 保护
【发布时间】:2017-05-04 07:25:36
【问题描述】:

我已经读过一些topics

而我遇到的问题就在于这段代码

<meta property="csrf-token" name="csrf-token" content="{{ csrf_token() }}">

我使用 Angular2 作为核心引擎,它向 Laravel API 发送 AJAX 请求,我没有使用刀片模板 - 只是 .html files,所以我不能从 html 文件调用 php 函数 csrf_token()

所以,我通过扩展我的 /var/www/pandacrm/app/Http/Middleware/VerifyCsrfToken.php 文件

public function handle($request, Closure $next)
{
    if ( ! $request->is('api/*'))
    {
        return parent::handle($request, $next);
    }

    return $next($request);
}

但这似乎不是最好的解决方法,是否有其他解决方案可以解决此问题?

【问题讨论】:

  • 您可以禁用 CSRF 中间件(不推荐)或为 CSRF 中间件提供您认为有效的令牌。在没有某种跨站点请求伪造保护的情况下发出 ajax 请求是一件非常危险的事情。

标签: php ajax angular laravel-5 csrf


【解决方案1】:

您可以在 html 文件中使用 JavaScript 创建带有 csrf-tokenmeta 标记!

如何做到这一点:

向 Laravel Route 发送 Ajax 请求以获取令牌。 (在控制器操作中返回 csrf-token)然后在您的 html 文件中使用该标记创建一个元标记。

但在此之前,您必须在该特定路由上禁用 csrf 保护。 有一种方法可以做到这一点 here 用于 laravel5 和 here 用于 5.3。

现在您有了一个带有csrf 的元标记,可用于其他ajax 请求。

【讨论】:

    猜你喜欢
    • 2018-05-27
    • 2015-03-11
    • 2016-09-05
    • 2019-02-03
    • 2019-11-29
    • 1970-01-01
    • 2010-12-22
    • 2016-03-30
    • 1970-01-01
    相关资源
    最近更新 更多