我有一个网站,提交该帖子后会转到安装了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
答案 0 :(得分:1)
您有一些选择比当前的自我解答要好。
$except
首先,您的$except
应该是表单发布到的路径,而不是表单所在的网址。这具有使Laravel应用程序中的其他内容受CSRF令牌保护的好处。您当前的解决方案将所有功能全部关闭。这不是理想的方法,但是它将完成您想要做的事情。
将表单设为iframe,这样您就可以首先拥有一个合法的CSRF令牌。这就是FaceBook和Twitter经常(或我上次看过)对他们的社交媒体按钮(如共享,转发)进行的操作。
设置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',
],
];