【问题标题】:Submit posts data from external website into laravel将来自外部网站的帖子数据提交到 laravel
【发布时间】:2019-02-19 06:11:59
【问题描述】:

我有一个网站,当提交帖子时,它会转到安装了 laravel 的外部网站。我在网站上有一个通用表单,提交后我不断收到 laravel 中的 419 错误。我在VerifyCsrfToken中添加了url,还是不行。

/app/Http/Middleware/VerifyCsrfToken.php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    /**
     * Indicates whether the XSRF-TOKEN cookie should be set on the response.
     *
     * @var bool
     */
    protected $addHttpCookie = true;

    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        'https://pharaohmfg.com/collections/*'
    ];
}

web.php

Route::get('/', 'PostController@index')->name('home.index');
Route::post('callback', 'PostController@callback')->name('callback.post');

postController.php

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;

class PostController extends Controller 
{
    public function index(Request $request)
    {
        return redirect()->away('http://pharaohmfg.com');
    }

    public function callback(Request $request)
    {
        return $request->all();
    }
}

我做错了什么?网址是https://pharaohmfg.com/collections/billiard-pool-tables/products/siamun-pool-table

【问题讨论】:

  • 你的路线有名字吗?我认为您需要使用 $except 属性的名称。
  • 另外,$except 应该是被排除的路由(端点)。
  • 我不明白你在说什么
  • 你的路线有名字吗?你能告诉我你的routes/web.php吗?
  • 你应该在 $except 数组中添加/callback

标签: php laravel forms


【解决方案1】:

你有几个选项比你目前的自我回答更好。

修复你的$except

首先,您的$except 应该是表单发布到的路由,而不是表单所在的网址。这样做的好处是让 Laravel 应用程序中的任何其他内容都受到 CSRF 令牌的保护。您当前的解决方案将所有这些都关闭。这并不理想,但它会完成您想要做的事情。

iframe 你的表单

将表单设置为 iframe,以便您首先拥有合法的 CSRF 令牌。这就是 FaceBook 和 Twitter 经常做的(或者我最后一次做的)他们的社交媒体按钮(喜欢、分享、转发)。

阿贾克斯

设置 cors 标头,您可以编写一些花哨的 js 来从另一个路由获取 CSRF 令牌,同时将表单保留在外部站点上。好处是您还可以使用 ajax 提交表单,从而使外部服务器的存在变得显而易见。这与 iframe 解决方案一样,将允许使用适当的 CSRF 令牌为所有内容提供服务。

【讨论】:

    【解决方案2】:

    我想通了,

    在 app/http/kernel.php 中,我注释掉了正在加载的 verifycsrftoken 类。

    protected $middlewareGroups = [
            'web' => [
                \App\Http\Middleware\EncryptCookies::class,
                \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
                \Illuminate\Session\Middleware\StartSession::class,
                // \Illuminate\Session\Middleware\AuthenticateSession::class,
                \Illuminate\View\Middleware\ShareErrorsFromSession::class,
                //\App\Http\Middleware\VerifyCsrfToken::class,
                \Illuminate\Routing\Middleware\SubstituteBindings::class,
            ],
    
            'api' => [
                'throttle:60,1',
                'bindings',
            ],
        ];
    

    【讨论】:

    • 这将禁用对您所有请求的验证。
    • 我知道,没关系,我只是需要它来做一些简单的事情
    • 我的意思是这不是一个真正的解决方案...这只是一种绕过问题的方法。
    猜你喜欢
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多