我有以下代码块:
return redirect()->action('mycontroller@myfunction',
[
'data0' => $request->data0,
'data1' => $request->data1,
'data2' => $request->data2,
'data3' => $request->data3,
]);
显示错误: MethodNotAllowedHttpException 可能是因为csrf令牌未通过此路由传递。
Route::post('congrats', 'mycontroller@myfunction');
我不希望数据0,数据1等值显示在网址中,这就是我希望它成为POST的原因。
如何在重定向操作上传递csrf令牌?还有其他方法吗?例如,使用GET但隐藏特定数据?
答案 0 :(得分:1)
修改此类VerifyCsrfToken
课程,以禁用对路线的验证
protected $except_urls = [
'contact/create',
'contact/update',
...
];
public function handle($request, Closure $next)
{
$regex = '#' . implode('|', $this->except_urls) . '#';
if ($this->isReading($request) || $this->tokensMatch($request) || preg_match($regex, $request->path()))
{
return $this->addCookieToResponse($request, $next($request));
}
throw new TokenMismatchException;
}
更改内核以指向新的中间件:
protected $middleware = [
...
'App\Http\Middleware\VerifyCsrfToken',
];
修改强>
在laravel docs中
将此添加到VerifyCsrfToken
类
protected $except = [
'stripe/*',
];