将外部网站的帖子数据提交到laravel

时间:2019-02-18 18:57:55

标签: php laravel forms

我有一个网站,提交该帖子后会转到安装了laravel的外部站点。我在网站上有通用表格,提交后我一直在laravel中收到419错误。我已在VerifyCsrfToken中添加了该网址,但仍然无法正常工作。

/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

2 个答案:

答案 0 :(得分:1)

您有一些选择比当前的自我解答要好。

修复您的$except

首先,您的$except应该是表单发布到的路径,而不是表单所在的网址。这具有使Laravel应用程序中的其他内容受CSRF令牌保护的好处。您当前的解决方案将所有功能全部关闭。这不是理想的方法,但是它将完成您想要做的事情。

iframe您的表单

将表单设为iframe,这样您就可以首先拥有一个合法的CSRF令牌。这就是FaceBook和Twitter经常(或我上次看过)对他们的社交媒体按钮(如共享,转发)进行的操作。

Ajax

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

答案 1 :(得分:0)

我想通了,

在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',
        ],
    ];